typescript generic type guard

我有一个变量,可以是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没有编译。

回答:

有多个问题,在这里:

  1. isC功能需要Foo作为一个类型参数。这意味着它需要声明如下:

    private isC<Foo>(... 

  2. isC返回类型定义不匹配其输入参数。返回类型声明isC返回true,当其参数d类型C<Foo>[],但输入类型被限制为Foo[]C<Foo>(它们都不是C<Foo>[])。

    此申报工作:

    private isC<Foo>(d: Foo[] | C<Foo>[]): d is C<Foo>[] { ... 

  3. (<C<Foo>>)d[0]不是有效的类型转换。试试这个,而是:

    return (d as C<Foo>[])[0].key !== undefined 

也看到这个playground with compiling example。

回答:

private isC(d: Foo[] | C<Foo>): d is C<Foo>[] { 

return (d as C<Foo>[])[0].key !== undefined

}

以上是 typescript generic type guard 的全部内容, 来源链接: utcz.com/qa/266769.html

回到顶部