我有以下代码:
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;
}
还是有其他方法可以解决此问题?
答案 0 :(得分:1)
定义后卫“ el is B”。它可以工作(即使在严格模式下)
UpdatedAt