如何使用对象作为键的字典?

时间:2016-06-03 12:40:35

标签: typescript

我尝试使用对象作为键来使用字典:

api: {[key: string]: string} = {
  getItems: 'api/v1/items/all'
};

如果我尝试使用它var urlpath = api.getItems;,我会得到:

  

财产' getItems'在类型' {[key:string]:string;`上不存在   }。

如果我将密钥的类型更改为任何{[key: any]: string},我会得到:

  

索引签名参数类型必须是' string'或者'数字'。

我可以像这样使用它,但那不是我想要的:

var urlpath = api['getItems'];

如何使用对象作为键?

3 个答案:

答案 0 :(得分:1)

您可以使用由@basarat创建并命名为“typescript-collections”的精彩库。请找到以下链接: typescript collections

您需要的是使用以下命令安装它:

npm install typescript-collections

它还包含所有必要的定义,以使代码体验更好。

答案 1 :(得分:0)

看看这是否有帮助......

TypescriptDictionary.ts

export interface typescriptDictionary {
    getItems: string;    
    getItem2: string;
}

export class TypescriptDictionary implements typescriptDictionary {

    private _getItems: string;
    private _getItem2: string;

    constructor (item: string, item2: string ) {
          this._getItems = item;
          this._getItem2 = item2;
    }


    public get getItems(): string {
          return this._getItems;
    }

    public get getItem2(): string {
          return this._getItem2;
    }
}

要使用TypescriptDictionary.ts,导入其接口和类,创建一个IfcTypescriptDictionary.ts类型的变量,使用类构造函数初始化它,并使用相同的变量访问它的不同类型。

DemoUsage.ts

import {IfcTypescriptDictionary} from 'filePath';
import {TypescriptDictionary} from 'filePath';

export class UseDemo {

    var dictionary: IfcTypescriptDictionary;

    // initialize it with its class constructor.

    dictionary = new TypescriptDictionary('demo text', 'demo text1');

    // access it using
    console.log(dictionary.getItems);
    console.log(dictionary.getItems2);
}

此致

的Ajay

答案 2 :(得分:0)

解决方案:

const api: {[key: string]: string; getItems: string} = {
  getItems: 'api/v1/items/all'
};

Indexable types是为了与运营商[]一起使用而制作的。他们使用此运算符强制执行类型检查:

api['abc'] = 123; // Type 'number' is not assignable to type 'string'

他们没有提供访问任意成员名称api.abc的方法。