我声明了一个类型别名,但无法在不创建项目的情况下对其进行初始化:
type ModelState = [string, string[]];
const modelState: ModelState = [null,[]];
modelState["firstName"] = ["First name is required."];
TypeScript给我一个错误"输入' undefined []'不能指定类型' [string,string []]'"如果我尝试像这样初始化:
const modelState: ModelState = [];
正确的方法是什么?
答案 0 :(得分:2)
理想情况下,您应该使用数据初始化tupel,但您可以像这样欺骗编译器:
const modelState: ModelState = [] as any;
[string, string[]]
形式的tupel仍然是一个带有数字索引的数组。在我看来你真的想要这样的东西:
interface ModelState {
firstName: string[],
lastName: string[],
}
或者甚至可能是这样的:
interface ModelState {
[key: string]: string[],
}
答案 1 :(得分:0)
像这样初始化有问题:
const modelState: ModelState = [] as any;
尝试添加键值对:
modelState["firstName"] = ["First name is required."];
console.log(JSON.stringify(modelState));
JSON对象仍为空。
如果我像这样初始化并添加键/值,它会按预期工作。
const modelState: ModelState = {};
如果值不是字符串数组,则typescript会报告错误。如果密钥不是字符串,则不报告问题。
不确定我是否可以说这很直观,但确实有效。