如何将数组方法与联合类型元素一起使用?

时间:2019-03-09 10:17:12

标签: typescript

我有以下代码:

class A {}

class B {}

const arr = [new A(), new B()]

function findB(): B {
    return arr.find<B>(el => el instanceof B)
}

我遇到错误

  

类型'A | B'不可分配给类型'B'。     属性“ b”在类型“ A”中缺失,但在类型“ B”中是必需的。

与“过滤器”等方法相同。

interface Array<T> {
    find<S extends T>(predicate: (this: void, value: T, index: number, obj: T[]) => value is S, thisArg?: any): S | undefined;
    find(predicate: (value: T, index: number, obj: T[]) => boolean, thisArg?: any): T | undefined;
}

基于“数组”的定义,将那些方法与联合类型一起使用的唯一方法是重写接口?例如

interface Array<T> {
    find<S>(predicate: (this: void, value: T, index: number, obj: T[]) => boolean, thisArg?: any): S | undefined;
}

还是有其他方法可以解决此问题?

1 个答案:

答案 0 :(得分:1)

定义后卫“ el is B”。它可以工作(即使在严格模式下)

UpdatedAt