TypeScript:可以在数组中声明特定的序列类型吗?
TypeScript: Possible to declare a specific sequence type in array?
我目前正在为外部库编写声明文件,其中一个函数接受特定顺序的元素数组。例如,在下面的代码中,字符串 "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 code/logic 的功能。数组或对象不指定其元素或成员的特定顺序。检查元素的“正确”顺序是 运行 时间行为 并且不能由 TypeScript 专门检查;这将超出 TypeScript 的功能范围。
这里有两种方式:
- 在您的库中实施一些验证开销,以检查传递给您的库函数的任何数组。这很健壮,但可能会损害性能。
- 应用 GIGO 原则:垃圾输入,垃圾输出。谁实际负责为您的库逻辑提供正确的输入数据?您可以考虑只正确记录您的库,以便使用您的库的每个人都知道应该如何正确使用它。
也许您也可以采用两种方式:在您的库中发布一些额外的验证逻辑,以便您的库的最终用户可以选择在将数组传递给您的库函数之前验证他们的数组。
我目前正在为外部库编写声明文件,其中一个函数接受特定顺序的元素数组。例如,在下面的代码中,字符串 "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 code/logic 的功能。数组或对象不指定其元素或成员的特定顺序。检查元素的“正确”顺序是 运行 时间行为 并且不能由 TypeScript 专门检查;这将超出 TypeScript 的功能范围。
这里有两种方式:
- 在您的库中实施一些验证开销,以检查传递给您的库函数的任何数组。这很健壮,但可能会损害性能。
- 应用 GIGO 原则:垃圾输入,垃圾输出。谁实际负责为您的库逻辑提供正确的输入数据?您可以考虑只正确记录您的库,以便使用您的库的每个人都知道应该如何正确使用它。
也许您也可以采用两种方式:在您的库中发布一些额外的验证逻辑,以便您的库的最终用户可以选择在将数组传递给您的库函数之前验证他们的数组。