Typescript 使用括号和方括号定义类型脚本类型,什么';他们的意思是什么?
在Typescript中定义新类型时,方括号和圆括号扮演的角色是什么? 在下面的示例中,哪一个应该是Typescript 使用括号和方括号定义类型脚本类型,什么';他们的意思是什么?,typescript,Typescript,在Typescript中定义新类型时,方括号和圆括号扮演的角色是什么? 在下面的示例中,哪一个应该是typeThree变量的数据形状 到目前为止,我对它进行了研究,发现了以下几点 type typeOne = { [id: string] : string; }; type typeTwo = { id : string; }; type typeThree = { (id: string) : string; }; let varOne: typeOne[] = [{id:'', id2:'
typeThree
变量的数据形状
到目前为止,我对它进行了研究,发现了以下几点
type typeOne = { [id: string] : string; };
type typeTwo = { id : string; };
type typeThree = { (id: string) : string; };
let varOne: typeOne[] = [{id:'', id2:''}]; // OK
let varTwo: typeOne[] = [{idd:''}]; // OK
let varThree: typeTwo[] = [{idd:''}]; // error
let varFour: typeTwo[] = [{id:'', id2:''}]; // error
let varFive: typeTwo[] = [{idd:''}]; // error
let varSix: typeTwo[] = [{id:''}]; // OK
似乎描述了一组键和值为字符串的映射typeOne
似乎描述了一个映射数组typeTwo
必须只包含一个名为{id:'anystring'}
id
我不知道它在描述什么typeThree
类型
关键字,但有关接口的文档将适用于您的每个示例。类型
和接口
的工作方式相同,但不能将类型
用于传统
索引器
允许使用任意字符串键映射。在下面的示例中,键必须是字符串(因此从技术上讲,它是id:string | number
,但不允许显式声明),并且值必须是字符串(并且仅是字符串)
索引器在手册的后面部分进行了说明
对象
问题中的第二种类型是对象结构。它要求对象具有命名属性和适当类型的值。当使用文本创建类型的实例时,您将获得未知属性(不允许)的帮助,这有助于捕获拼写错误
type TypeTwo = { id: string; };
const a: TypeTwo = {
id: 'value'
}
// Object literal must only specify known values
const b: TypeTwo = {
id: 'value',
nmae: 'value'
}
// Type 'number' is not assignable to type 'string'.
const c: TypeTwo = {
id: 4
}
作用
问题中的第三种类型描述函数。下面的示例,包括示例b
的神秘案例,即使没有id
参数,该案例仍然有效。其逻辑是,如果忽略函数体中的参数,为什么要在签名中强制它呢。调用代码可能会提供它,但您无论如何都不会使用它
type TypeThree = (id: string) => string;
const a: TypeThree = (id: string) => {
return id;
};
const b: TypeThree = () => {
return 'value';
}
// Types of parameters 'id' and 'id' are incompatible.
const c: TypeThree = (id: number) => {
return 'value';
}
// Type 'number' is not assignable to type 'string'.
const d: TypeThree = (id: string) => {
return 5;
}
请参见手册中的。尽管您使用的是
类型
关键字,但有关接口的文档将适用于您的每个示例。类型
和接口
的工作方式相同,但不能将类型
用于传统
索引器
允许使用任意字符串键映射。在下面的示例中,键必须是字符串(因此从技术上讲,它是id:string | number
,但不允许显式声明),并且值必须是字符串(并且仅是字符串)
索引器在手册的后面部分进行了说明
对象
问题中的第二种类型是对象结构。它要求对象具有命名属性和适当类型的值。当使用文本创建类型的实例时,您将获得未知属性(不允许)的帮助,这有助于捕获拼写错误
type TypeTwo = { id: string; };
const a: TypeTwo = {
id: 'value'
}
// Object literal must only specify known values
const b: TypeTwo = {
id: 'value',
nmae: 'value'
}
// Type 'number' is not assignable to type 'string'.
const c: TypeTwo = {
id: 4
}
作用
问题中的第三种类型描述函数。下面的示例,包括示例b
的神秘案例,即使没有id
参数,该案例仍然有效。其逻辑是,如果忽略函数体中的参数,为什么要在签名中强制它呢。调用代码可能会提供它,但您无论如何都不会使用它
type TypeThree = (id: string) => string;
const a: TypeThree = (id: string) => {
return id;
};
const b: TypeThree = () => {
return 'value';
}
// Types of parameters 'id' and 'id' are incompatible.
const c: TypeThree = (id: number) => {
return 'value';
}
// Type 'number' is not assignable to type 'string'.
const d: TypeThree = (id: string) => {
return 5;
}
请参阅手册。从介绍和解释语法的文档开始,可能不比随机试验和尝试推断语义更容易吗?首先,这三个变量中没有一个定义数组,您随后将变量键入这些变量的数组。您已经定义了具有任意键的对象、具有键id的对象和函数。例如,请参阅,如果其他人(如我)在查找有关使用方括号的类型的信息时发现了以下情况:
函数blah():[string,boolean]
,则该特定示例就是一个示例。从介绍和解释语法的文档开始可能不容易,而不是随机试验并试图推断语义?首先,这三个变量中没有一个定义数组,您随后将变量键入这些变量的数组。您已经定义了具有任意键的对象、具有键id的对象和函数。例如,请参见,如果其他人(如我)在查找有关使用方括号的类型的信息时发现了这一点:函数blah():[string,boolean]
,则该特定示例是a。我认为我们没有描述相同的类型3,但其他两种解释很有帮助。我认为我们没有描述相同的类型3,但其他两种解释是有帮助的