Typescript对象的类型是什么:“ {[名称:string]:string}”?

时间:2019-09-25 03:14:42

标签: angular typescript

我开始使用有角度的HttpHeaders,但无法理解其构造函数的参数之一,即 [name:string]:string ,这是文档中的构造函数:

constructor(headers?: string | { **[name: string]: string** | string[]; })

任何人都可以解释该对象的类型或它所指的是什么吗?

3 个答案:

答案 0 :(得分:3)

这称为index signature

因此,您共享的headers?: string | { [name: string]: string | string[]; }完整类型声明是说headers可以是2种类型之一:字符串或具有特定形状的对象。

例如:

  • 字符串"some value"
  • 对象(具有string值):{ some: "value" }
  • 对象(具有string[]值):{ some: ["value", "foo"] }

索引签名{ [name: string]: string | string[]; }专门说,可以使用任何作为字符串的键name,其值可以是string或字符串数​​组({{1 }})。 string[]中的name实际上没有意义。

答案 1 :(得分:0)

这意味着您可以只将标头作为一个字符串或字符串标头定义的对象列表传递。 如果您正在寻找设置标题的最佳方法,请检查以下内容:

 let headers: HttpHeaders = new HttpHeaders();
    headers = headers.append(
    'Accept',
     'text/html,application/json,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0. 8'  
    );

或此处的答案:

How to correctly set Http Request Header in Angular 2

答案 2 :(得分:0)

这是一种声明对象的方法,或者可以说是字典,键/值对。在不需要定义属性(与接口不同)的地方,您只需说密钥将为string类型,而值将为string | string[]

因此,例如,当您将标头设置为{'Accept': 'application/json'}时,您正在创建一个密钥类型为'Accept'的字符串对,并且该密钥的值也为'application/json'类型为字符串。

通过这种声明类型的方式,我们可以拥有多个动态属性,因此最终可以得到:

const headers = {
  'Accept': 'application/json',
  'Authorization': `Bearer ${jwt}`,
};