我有一个变量,可以是C1[]
或C2
类型,我该如何为变量创建一个类型后卫?typescript generic type guard
interface C<T>{
key: string;
secret: T;
}
private isC(d: Foo[] | C) : d is C[] {
return (>)d[0].key !== undefined
}
方法isC
没有编译。
2 回答
private isC(d: Foo[] | C) : d is C[] {
return (d as C[])[0].key !== undefined
}
有多个问题,在这里:
的isC
功能需要Foo
作为一个类型参数。这意味着它需要声明如下:
private isC(...
的isC
返回类型定义不匹配其输入参数。返回类型声明isC
返回true
,当其参数d
类型C
,但输入类型被限制为Foo[]
或C
(它们都不是C
)。
此申报工作:
private isC<Foo>(d: Foo[] | C<Foo>[]): d is C<Foo>[] { ...
(
不是有效的类型转换。试试这个,而是:
return (d as C[])[0].key !== undefined
也看到这个playground with compiling example。
这家伙很懒,还没有设置简介