JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了javascript – TypeScript:如何在编译时声明固定大小的数组以进行类型检查大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

更新:这些检查用于编译时,而不是在运行时.在我的例子中,失败的案例都是在编译时捕获的,我期待其他应该失败的情况下的类似行为.

假设我正在编写一个类似于表的类,我希望该类的所有成员都是相同长度的数组,如:

class MyClass {
  tableHead:  String[3]; // expect to be a 3 element array of Strings
  tableCells: number[3]; // expect to be a 3 element array of numbers
}

到目前为止我发现的最接近的解决方案是:

class MyClass {
  tableHead:  [String,String,String];
  tableCells: [number,number,number];
}

let bar = new MyClass();
bar.tableHead = ['a','b','c']; // pass
bar.tableHead = ['a','b'];      // fail
bar.tableHead = ['a',1];   // fail

// BUT these also pass,which are expected to fail at compile time
bar.tableHead = ['a','c','d','e']; // pass
bar.push('d'); // pass
bar.push('e'); // pass

有更好的想法吗?

最佳答案
更新:从版本2.7开始,TypeScript现在可以是distinguish between lists of different sizes.

我不认为可以输入 – 检查元组的长度. Here是TypeScript作者对此主题的看法.

我认为你所要求的并不是必需的.假设您定义了此类型

type StringTriplet = [String,String]

并定义该类型的变量:

const a: StringTriplet = ['a','c']

您不能从该三元组中获得更多变量,例如

const [one,two,three,four] = a;

会出错,而这不符合预期:

const [one,three] = a;

我认为缺乏限制长度的能力成为问题的唯一情况是例如当你映射三元组时

const result = a.map(/* some pure function */)

并且期望结果有3个元素,实际上它可以有3个以上.但是,在这种情况下,你无论如何都将a视为集合而不是元组,因此这不是元组语法的正确用例.

大佬总结

以上是大佬教程为你收集整理的javascript – TypeScript:如何在编译时声明固定大小的数组以进行类型检查全部内容,希望文章能够帮你解决javascript – TypeScript:如何在编译时声明固定大小的数组以进行类型检查所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。