javascript - Typescript 通用类型保护

标签 javascript typescript types casting

我的变量可以是 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未编译。

最佳答案

这里有多个问题:

  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 .

关于javascript - Typescript 通用类型保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47996658/

相关文章:

javascript - 如何从 PHP 中提取 JSON 数据并将其显示在数据表中?

Angular4 在构造函数中调用一个函数

scala - 类型注释被推断的表达式类型覆盖

java - 奇怪的结果增加了一个超过其最大值的短路

javascript - 尽管在 HTML 的视频标签中使用 "autoplay",但视频不会自动播放

javascript - 单击链接两次以激活 ui router 的状态

javascript - 如何添加itemtap

reactjs - React 和 TypeScript 中的表单,带有 DRY 更改句柄

angular - 部署到 Azure 后未定义 webpackJsonp

vb.net - 如何创建 'OF' 变量类型?