Type Predicates
type Predicatesも推論される
ts// const isNumber: (x: unknown) => x is number
const isNumber = (x: unknown) => typeof x === 'number';
// const isNonNullish: <T>(x: T) => x is NonNullable<T>
const isNonNullish = <T,>(x: T) => x != null;
推論される条件
その関数の返り値の型を明示的に指定していない
関数内の return
は1つである
その関数は引数の上書きをしない
その関数は、引数の絞り込みに関連したbooleanを返している
↑この条件だと、もうほぼ
x is Tと書く機会はなくなりそうだな

is
を使って自作TypeGuradなるものを作る
返り値の型は boolean
を定義する
is
は実装によらず、その型になるので注意
例
tsexport const notEmpty = <Value>(
value: Value | null | undefined,
): value is Value => value != null;
安全に