使用typescript别名时如何初始化空数组?

时间:2018-01-17 17:04:43

标签: typescript

我声明了一个类型别名,但无法在不创建项目的情况下对其进行初始化:

type ModelState = [string, string[]]; const modelState: ModelState = [null,[]]; modelState["firstName"] = ["First name is required."];

TypeScript给我一个错误"输入' undefined []'不能指定类型' [string,string []]'"如果我尝试像这样初始化:

const modelState: ModelState = [];

正确的方法是什么?

2 个答案:

答案 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会报告错误。如果密钥不是字符串,则不报告问题。

不确定我是否可以说这很直观,但确实有效。