- assertion: 「断定」 → 型断定
- 純粋にコンパイラよりもその型をより良く理解していることだけでなく、
後で推測するべきではないことをコンパイラに伝えている
- その推論された型や、既に型定義済みの変数の型を上書きする
- 根拠なく開発者の判断がまかりとおる、型安全性がまったく保証されない方法
as による型アサーション
const test = {} // ここでTSは testの型はプロパティがゼロのオブジェクトね! と型推論する
test.foo = 123 // numberなのでコンパイルエラー!!
interface Test {
foo: number
}
const test = {} as Test
test.foo = 123 // OK!!
型ガードでスマートに型安全を保証する
const foo: unknown = '1,2,3,4';
if (typeof foo === 'string') {
console.log(foo.split(','));
}
console.log(foo.split(',')); // compile error!
ユーザー定義型ガード
- 型の絞り込み (type narrowing) に使うことができる関数
- 返り値が
引数名 is 型
のような形の型述語 (type predicate) になっている
- 真偽値を返り値として返し、
true
を返すならば引数名
が型
であることを表す
function isStringOrNumber(value: unknown): value is string | number {
return typeof value === "string" || typeof value === "number";
}
// 使い方
function useUnknown(v: unknown) {
// v はここでは unknown 型
if (isStringOrNumber(v)) {
// v はここでは string | number 型
console.log(v.toString());
}
}