首页 > 解决方案 > 从数组中过滤未定义时的打字稿类型错误

问题描述

我想像这样从数组中过滤未定义的项目

type Kind = 'foo' | 'bar'

const someFunc = () : Array<{ kind: Kind, name: string }> => {
    return [{ kind: 'foo', name: 'a' }].filter(x => x !== undefined)
}

给出以下类型错误:

Type '{ kind: string; name: string; }[]' is not assignable to type '{ 
kind: Kind; name: string; }[]'.
Type '{ kind: string; name: string; }' is not assignable to type '{ 
kind: Kind; name: string; }'.
Types of property 'kind' are incompatible.
  Type 'string' is not assignable to type 'Kind'.

为什么会失败,如何处理?

标签: typescript

解决方案


因为 TypeScript 是从[{ kind: 'foo', name: 'a' }]. 如果你告诉它数组的类型是什么,它会更快乐。:)

type Kind = 'foo' | 'bar'

const someFunc = (): Array<{ kind: Kind; name: string }> => {
    const array: Array<{kind: Kind; name: string}> = [{ kind: 'foo', name: 'a' }];
    return array.filter(x => x !== undefined)
}

推荐阅读