限制Typescript中对象值的类型

时间:2019-05-08 19:26:25

标签: typescript types

在打字稿中,如何为可以有任何键的普通旧javascript对象编写类型签名,但是值始终是字符串。例如,{a:"foo"}{b:"bar"}都是有效值,而{a:[1,2,3]}{b:3}都不是有效值。

我希望能够写类似的东西

let foo : {*: string} = {a: "foo"}

当前,我正在使用any来实现这一点,但这并不像我想要的那么精确。

2 个答案:

答案 0 :(得分:1)

您可以使用索引签名来声明所有值都是字符串...

type Example = { [key: string]: string };

示例:

type Example = { [key: string]: string };

const a: Example = {
    "anything": "any string", // ok
    anotherkey: "a string", // ok
    thirdKey: 1 // Error
};

答案 1 :(得分:0)

我猜您正在使用enum定义来定义属性值。

我认为您可以这样声明:

let foo: { [k: string]: 'foo' | 'bar' | 'type'};

foo.a = 'bar';
foo.d = 'type';
foo.q = 'bar';
foo.c = 'let'; // shows as not assignable

您可以在this typescript fiddle

中看到它