TypeScript stringとnumberのUnion配列をfilterする

2020年3月13日

以下、result は string にしたいがエラーになる

const arr: (string | number)[] = [123, 456, 'AND']
const result: string = arr.find(i => typeof i === 'string')
Type 'string | number' is not assignable to type 'string'.
  Type 'number' is not assignable to type 'string'

is を使う

https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards

const result: string = arr.find((i): i is string => typeof i === 'string')