Jan*_*utz 14 javascript arrays typescript
基本上我想要一个最大长度为 4 的数组类型。很容易我无法找到如何在打字稿中实现此检查。有人可以帮我吗?像这样的东西:
const a = [item1, item2, item3, item4, *item5*] -> array has a maximum length of 4
Run Code Online (Sandbox Code Playgroud)
谢谢!
jca*_*alz 20
TypeScript 有称为tuples 的“固定长度”数组类型。您可以使用可选的元组元素来表示长度在最大 4 范围内的数组。如果您想尝试保持长度限制,我建议使用readonly
元组:
type ArrayOfMaxLength4 = readonly [any?, any?, any?, any?];
const a: ArrayOfMaxLength4 = [item1, item2, item3, item4, item5]; // error!
// ~ <-- Source has 5 element(s) but target allows only 4
const b: ArrayOfMaxLength4 = [item1, item2, item3]; // okay
Run Code Online (Sandbox Code Playgroud)
我将“固定长度”放在引号中,因为元组由特殊类型的 表示并键入Array
,它具有类似的方法push()
可以更改长度。没有什么可以阻止您将push
值添加到元组的末尾。
const c: [number, string] = [1, "a"];
c.push(2); // oops
c.unshift("OOPS"); // big oops, totally wrong value in tuple
console.log(c); // ["OOPS", 1, "a", 2]
Run Code Online (Sandbox Code Playgroud)
有人在microsoft/TypeScript#6325请求阻止这种情况发生,但遭到拒绝。使违反约束变得更加困难的一种方法是使用 aReadonlyArray
或readonly
元组,它不会公开任何方法来让您改变数组。如果您想在不更改数组长度或元素类型的情况下修改元素,这可能会太过分,但它至少会警告您以下内容push()
:
b.push(5); // error
//~~~~ <-- Property 'push' does not exist on type 'ArrayOfMaxLength4'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12949 次 |
最近记录: |