Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 使用括号和方括号定义类型脚本类型,什么';他们的意思是什么?_Typescript - Fatal编程技术网

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:'

在Typescript中定义新类型时,方括号和圆括号扮演的角色是什么? 在下面的示例中,哪一个应该是
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,但其他两种解释是有帮助的