我尝试使用对象作为键来使用字典:
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'];
如何使用对象作为键?
答案 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
的方法。