我有一個變量,可以是C1[]
或C2<C1>[]
類型,我該如何爲變量創建一個類型後衛?typescript generic type guard
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
沒有編譯。
我有一個變量,可以是C1[]
或C2<C1>[]
類型,我該如何爲變量創建一個類型後衛?typescript generic type guard
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
private isC(d: Foo[] | C<Foo>): d is C<Foo>[] {
return (d as C<Foo>[])[0].key !== undefined
}