【问题标题】:TypeScript: Creating an empty typed container arrayTypeScript:创建一个空类型的容器数组
【发布时间】:2013-03-27 10:40:07
【问题描述】:

我正在使用 TypeScript 创建简单的逻辑游戏,名为“犯罪三部曲”。

尝试在 TypeScript 中预分配类型化数组时,我尝试执行以下操作:

var arr = Criminal[];

这给出了错误 "检查表达式术语的格式"。

也试过这样做

var arr : Criminal = [];

这产生了“无法将任何[]转换为'Criminal'

执行此操作的“TypeScript”方法是什么?

【问题讨论】:

    标签: javascript arrays typescript


    【解决方案1】:

    请试试这个对我有用的。

    return [] as Criminal[];
    

    【讨论】:

      【解决方案2】:

      好吧,你这里的语法错误,正确的做法是:

      var arr: Criminal[] = [];
      

      我假设您使用的是 var,这意味着在 func() 中的某处声明它,我的建议是使用 let 而不是 var

      如果将其声明为 c 类属性,则使用私有、公共、受保护等访问修饰符。

      【讨论】:

        【解决方案3】:

        供公众访问使用,如下所示:

        public arr: Criminal[] = [];
        

        【讨论】:

          【解决方案4】:

          现有的答案错过了一个选项,所以这里有一个完整的列表:

          // 1. Explicitly declare the type
          var arr: Criminal[] = [];
          
          // 2. Via type assertion
          var arr = <Criminal[]>[];
          var arr = [] as Criminal[];
          
          // 3. Using the Array constructor
          var arr = new Array<Criminal>();
          
          1. 当变量声明的类型推断失败时,显式指定类型是通用解决方案。

          2. 使用type assertion(有时称为强制转换,但它在 TypeScript 中并不是真正的强制转换)的优势适用于任何表达式,因此即使没有声明变量也可以使用它。类型断言有两种语法,但如果你关心的话,只有后者才能与 JSX 结合使用。

          3. 使用 Array 构造函数只会在这个特定用例中对您有所帮助,但我个人认为它最易读。但是,运行时有轻微的performance impact*。另外,如果有人疯狂到重新定义 Array 构造函数,the meaning could change

          这是个人喜好问题,但我发现第三个选项最易读。在绝大多数情况下,上述缺点可以忽略不计,而可读性是最重要的因素。

          *:有趣的事实;在撰写本文时,Chrome 的性能差异为 60%,而 Firefox 则没有可测量的性能差异。

          【讨论】:

          • 这让我相信,一种语言只有一种做事方式是最好的。
          • 可以注意到 &lt;&gt; 运算符在 tsx 中不起作用,但 as 选项在那里完全有效。
          【解决方案5】:

          我知道这是一个老问题,但我最近遇到了一个类似的问题,无法通过这种方式解决,因为我必须返回一个特定类型的空数组。

          我有

          return [];
          

          其中[]Criminal[] 类型。

          return: Criminal[] [];return []: Criminal[]; 都不适合我。

          乍一看,我通过在返回它之前创建一个类型化变量(如you 正确报告)来解决它,但是(我不知道 JavaScript 引擎是如何工作的)它可能会产生开销并且它的可读性较差。

          为了彻底起见,我也会在我的回答中报告这个解决方案:

          let temp: Criminal[] = [];
          return temp;
          

          最终我找到了 TypeScript 类型转换,它让我能够以一种更简洁易读(而且可能更高效)的方式解决问题:

          return <Criminal[]>[];
          

          希望这对未来的读者有所帮助!

          【讨论】:

            【解决方案6】:

            由于数组字面量语法,在 TypeScript 中正确预分配类型化数组的问题有些模糊,所以它不像我最初想象的那么直观。

            正确的方法是

            var arr : Criminal[] = [];
            

            这将为您提供一个类型正确的空数组,存储在变量“arr”中

            希望这对其他人有所帮助!

            【讨论】:

              猜你喜欢
              • 2014-06-03
              • 2021-09-27
              • 2020-01-29
              • 2018-06-11
              • 1970-01-01
              • 1970-01-01
              • 2020-11-19
              • 2015-12-20
              相关资源
              最近更新 更多