我有这个代码Typescript
:
const [history, setHistory] = useState([Array(9).fill(null)]);
Run Code Online (Sandbox Code Playgroud)
const newHistory = history.slice(0, currentStep + 1);
Run Code Online (Sandbox Code Playgroud)
当我想使用这样的扩展运算符设置新状态时:
setHistory(...newHistory);
Run Code Online (Sandbox Code Playgroud)
我有错误:
扩展参数必须具有元组类型或传递给剩余参数。
有人可以帮助我,我如何正确输入这个?
例如,长度只能为两个字符的字符串,可用于 ISO 国家/地区代码。
我使用过谷歌并查看了文档,但找不到答案。
基本上我想要一个最大长度为 4 的数组类型。很容易我无法找到如何在打字稿中实现此检查。有人可以帮我吗?像这样的东西:
const a = [item1, item2, item3, item4, *item5*] -> array has a maximum length of 4
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在使用Typescript创建一个shogi游戏板.将棋盘有9个等级和档案.
我想断言一个9x9多维数组作为一种类型,以确保数组的大小和内容.
目前我正在以这种方式创建我的9x9板类型:
type Board9x9<P> = [
[P, P, P, P, P, P, P, P, P],
[P, P, P, P, P, P, P, P, P],
[P, P, P, P, P, P, P, P, P],
[P, P, P, P, P, P, P, P, P],
[P, P, P, P, P, P, P, P, P],
[P, P, P, P, P, P, P, P, P],
[P, P, P, P, P, P, P, P, P],
[P, P, P, P, P, P, P, P, P],
[P, …
Run Code Online (Sandbox Code Playgroud) 更新:这些检查用于编译时,而不是在运行时.在我的例子中,失败的案例都是在编译时捕获的,我期待其他应该失败的情况下的类似行为.
假设我正在编写一个类似于表的类,我希望该类的所有成员都是相同长度的数组,如:
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
}
Run Code Online (Sandbox Code Playgroud)
到目前为止我发现的最接近的解决方案是:
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', 'b', 1]; // fail
// BUT these also pass, …
Run Code Online (Sandbox Code Playgroud) 元组中的Typescript允许添加以前使用过的任何类型的额外元素,但我想限制长度.我试过了& { length: 2 }
,但没有帮助:
declare var a: [string, number] & { length: 2 };
a[0] = "1"
a[1] = 2;
a[2] = "3";
a[3] = 4;
Run Code Online (Sandbox Code Playgroud)
分配[2]
和[3]
不产生错误.如何指定相应的类型?