[[TypeScript]]が推論した型を上書きするメカニズム。`as 型`という形式。
```ts
interface Human {
name: string
}
const obj = {} as Human
// ^? const obj: Human
obj.name = "your-name"
```
<button class="playground"><a href="https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgBIFcC2cTIN4BQyxyIcmEAXMgM5hSgDmBAvkSQQgPYh3JcAjAFbIAvPhbI4NNFhwEA9ApLEAegH4CgoQDoyFMcgBEATy7ooAWn0QjBIA">Playground</a></button>
ただし、変換不可能なものに[[型アサーション (TypeScript)|型アサーション]]は機能せずエラーになる。
```ts
interface Human {
name: string
}
const ok1 = {name: "hoge"} as Human
const ok2 = {name: "hoge", hoge: true} as Human
const ok3 = {} as Human
// 以下はエラー
const err1 = {name: 1} as Human
const err2 = {hoge: true} as Human
const err3 = "hoge" as Human
```
<button class="playground"><a href="https://www.typescriptlang.org/play?ssl=12&ssc=29&pln=12&pc=1#code/JYOwLgpgTgZghgYwgAgBIFcC2cTIN4BQyxyIcmEAXMgM5hSgDmBAvkSQQgPYh3JcBrAIzIAvPjIVqAIgAWXRhGktkcGmiw5OPPoIBMYieSrI5CpQBpk8xdXroIKtRuwhtvMPwEBmQ3ifqGK4EBAD0ociAp3KA0HKA9gyAFQyAlwyAPwzufNBQIuJ4kiZCAS5a3B7IGQbZNib2jqqBmm7F6VBQvuJmitK1hSBAA">Playground</a></button>
> [!question]
> ok3は問題ないのに、err2がエラーになる理由がいまいち分からない...。必須のキー`name`がないからなら、`{}`もエラーな気が...
危険を覚悟でエラーにせず[[型アサーション (TypeScript)|型アサーション]]を通したいときは[[any型]]や[[unknown型]]を経由する。
```ts
interface Human {
name: string
}
// 力技で通すこともできる
const unsafeOk1 = {name: 1} as any as Human
const unsafeOk2 = {name: 1} as unknown as Human
```
<button class="playground"><a href="https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgBIFcC2cTIN4BQyxyIcmEAXMgM5hSgDmBAvgQQPQfKDZSoAFGgcwZAWAmBNBkDKDIAsGQEEMAwLIMgaIYCCAPYg6ydGrgwIAeQDWARmQBefGQrVDLZHBq2QAT1v2M2EEtXrNNbXv0ATKbm5FTI1i4aIPogygDuuHZoWDhAA">Playground</a></button>