TypeScript中用于关联对象数组的接口

49

我有一个像这样的对象:

var obj = {
    key1: "apple",
    key2: true,
    key3: 123,
    .
    .
    .
    key{n}: ...
}

因此,obj可以包含任意数量的命名键,但所有值必须是字符串、布尔或数字。

如何在TypeScript中将obj的类型声明为接口?我可以声明一个联合类型的关联数组(或可变元组)或类似的东西吗?

2个回答

83

是的,你可以使用索引签名

interface MyType {
    [key: string]: string | boolean | number;
}

var obj: MyType = {
    key1: "apple",
    key2: true,
    key3: 123
};

6
你在文档中找到这个了吗?我已经搜过了(当然没有全部搜过),但是没有找到。如果有链接的话,非常感谢! - panepeter

4
我在阅读了这个问题和David's answer后,深入研究了文档,想出了一个绝妙的解决方案!
我使用了泛型类型来创建一个字典接口
interface Dictionary<Type> {
   [key: string]: Type;
}

您可以像这样(重新)使用它:
const myNumbers:Dictionary<number> = {
    key1: 1,
    key2: 2,
    key3: 3
};

const myStrings: Dictionary<string> = {
    key1: 'Lorem',
    key2: 'Ipsum',
    key3: 'Dolor'
};

const myElements:Dictionary<HTMLElement> = {
    button: document.querySelector('#button'),
    input: document.querySelector('#input')
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接