我想使用字符串的索引接口.

interface IDictionary {
     [index: string]: string;
}
var params: IDictionary;
params = [{ "heart": "HP" }, { "mana": "MP" }];
console.log(params);

我想这可能像是一对 keys 和价值的 map .我不确定这是正确的方法.

推荐答案

使用索引器可以限制使用索引语法为对象放置或获取的内容.例如,foo被推断为string型:

interface IDictionary {
     [index: string]: string;
}
var params = {} as IDictionary;

params['heart'] = 'HP'; // okay
var foo = params['heart']; // foo:string

另一方面,以下是一个错误,因为它不会进行类型判断:

var bar:number = params['heart']; // ERROR
params['heart'] = 234; // ERROR

完整演示:

interface IDictionary {
     [index: string]: string;
}
var params = {} as IDictionary;

params['heart'] = 'HP'; // okay
var foo = params['heart']; // foo:string


var bar:number = params['heart']; // ERROR
params['heart'] = 234; // ERROR

Typescript相关问答推荐

如何准确确定此特定场景中的类型?

返回对象的TypScript构造函数隐式地替换This的值来替换super(.)的任何调用者?

net::BER_RECTION_REUSED和Uncatch使用Axios和TanStack-Query useMutation时未捕获错误(DelivercMutation)

TypScript手册中的never[]参数类型是什么意思?

如何用不同的键值初始化角react 形式

使某些类型的字段变为可选字段'

在TypeScript中,除了映射类型之外还使用的`in`二进制运算符?

在Angular中注入多个BrowserModules,但在我的代码中只有一个

从typescript中的对象数组中获取对象的值作为类型'

在打印脚本中使用泛型扩展抽象类

刷新时保持当前名称的Angular

如何正确调用创建的类型?

避免混淆两种不同的ID类型

为什么发送空字段?

map 未显示控制台未显示任何错误@reaction-google-map/api

使用强制转换编写打字函数的惯用方法

如何提取具有索引签名的类型中定义的键

记录的子类型<;字符串,X>;没有索引签名

如何避免TS2322;类型any不可分配给类型never;使用索引访问时

从泛型对象数组构造映射类型