我的变量可以是 C1[]
类型之一或C2<C1>[]
如何为变量创建类型保护?
interface C<T>{
key: string;
secret: T;
}
private isC(d: Foo[] | C<Foo>): d is C<Foo>[] {
return (<C<Foo>>)d[0].key !== undefined
}
方法isC
未编译。
最佳答案
这里有多个问题:
isC
功能需求Foo
作为类型参数。这意味着它需要这样声明:private isC<Foo>(...
isC
的返回类型定义与其输入参数不匹配。返回类型声明isC
返回true
,当其参数d
类型为C<Foo>[]
,但输入类型限制为Foo[]
或C<Foo>
(它们都不是C<Foo>[]
)。此声明应该有效:
private isC<Foo>(d: Foo[] | C<Foo>[]): d is C<Foo>[] { ...
(<C<Foo>>)d[0]
不是有效的类型转换。试试这个:return (d as C<Foo>[])[0].key !== undefined
关于javascript - Typescript 通用类型保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47996658/