用TypeScript声明自定义类型以及如何测试它?

用TypeScript声明自定义类型以及如何测试它?,typescript,Typescript,我想声明一个类型,可以是object,也可以是Array 如果是对象,则键可以是字符串,值可以是字符串、对象或长度为2的数组 如果是数组,则它将是长度为2的数组 第一个元素将是一个字符串 第二个元素可以是字符串或对象 我尝试了以下方法,但在vscode中使用它并不能显示我想要的自动完成 顺便问一下,如何测试declare类型 type ArrayTemplate = [ string, string | ObjectTemplate ] type ObjectTemplate = {

我想声明一个类型,可以是object,也可以是Array

  • 如果是对象,则键可以是字符串,值可以是字符串、对象或长度为2的数组
  • 如果是数组,则它将是长度为2的数组
    • 第一个元素将是一个字符串
    • 第二个元素可以是字符串或对象
我尝试了以下方法,但在vscode中使用它并不能显示我想要的自动完成

顺便问一下,如何测试declare类型

type ArrayTemplate = [ string, string | ObjectTemplate ]
type ObjectTemplate = {
    [key: string]: string | ObjectTemplate | ArrayTemplate
}

type CamaroTemplate = ObjectTemplate | ArrayTemplate

我已经测试过你的类型,它们似乎表现出你所描述的样子。要正确使用类型并获得VS代码自动完成,必须明确声明变量的类型:

let t: ArrayTemplate = ["", ""];
let o: ObjectTemplate = { "TEST": t, "TEST2": "oops" }
t[1] = "another test";
console.log(o["TEST"]); // will log ["", "another test"]
console.log(o["TEST2"][""]); // undefined as type string has no property ""

因为您使用的是联合类型,所以需要注意在运行时是否正确处理了变量。例如,编译器将允许我执行代码段中的最后一行,但在运行时它将解析为未定义。在我看来,最好避免使用联合类型,因为它们在运行时很容易出错。

我已经测试了您的类型,它们的行为似乎与您描述的一样。要正确使用类型并获得VS代码自动完成,必须明确声明变量的类型:

let t: ArrayTemplate = ["", ""];
let o: ObjectTemplate = { "TEST": t, "TEST2": "oops" }
t[1] = "another test";
console.log(o["TEST"]); // will log ["", "another test"]
console.log(o["TEST2"][""]); // undefined as type string has no property ""
因为您使用的是联合类型,所以需要注意在运行时是否正确处理了变量。例如,编译器将允许我执行代码段中的最后一行,但在运行时它将解析为未定义。在我看来,最好避免使用联合类型,因为它们在运行时很容易出错