TypeScript:是否可以在数组中声明特定的序列类型



我目前正在为一个外部库编写一个声明文件,它的一个函数接受一个按特定顺序排列的元素数组。例如,在下面的代码中,字符串"A", "B", "C"应该总是以相同的顺序出现,后面跟着其他元素。

let specificArray      = ['A', 'B', 'C',  1, 2, 3] // ✔ Correct Usage
let specificArrayTwo   = [ 1, 2, 'A', 'B', 'C', 3] // ✔ Correct Usage
let specificArrayThree = [ 1, 'A', 2, 'B', 'C', 3] // ✕ Wrong Usage
let specificArrayFour  = [ 1, 'C', 'A', 'B', 2, 3] // ✕ Wrong Usage

目前有没有任何方法可以使用TypeScript强制执行此规则?

您的问题的答案是:"不,这是不可能的">

TypeScript仅提供有助于编译时类型检查您的JavaScript代码/逻辑的功能。数组或对象不指定其元素或成员的特定顺序。检查";正确的";元素的顺序是运行时行为,不能由TypeScript专门检查;这将超出TypeScript的功能范围。

你可以在这里走两条路:

  • 在库中实现一些验证开销,用于检查传递给库函数的任何数组。这是稳健的,但可能会损害性能
  • 应用GIGO原则:垃圾输入,垃圾输出。谁真正负责为您的库逻辑提供正确的输入数据?你可以考虑只正确地记录你的库,这样每个使用你的库的人都会被告知如何正确使用它

也许你也可以双管齐下:在你的库中发布一些额外的验证逻辑,这样你的库的最终用户就可以选择在将数组传递给你的库函数之前验证它们。

最新更新