如何为接口中的所有属性定义类型?

时间:2018-01-13 14:38:28

标签: typescript

我定义了一个在i18n应用程序中提供字符串的接口:

interface ILocaleStringsProvider {
  'foo': string
  'bar': string
  'baz': string
  'blablabla': string
  // hundreds of string properties here...
}

我不想多次重复: string

有没有办法一次定义所有属性的类型?

2 个答案:

答案 0 :(得分:1)

您可以使用Record<K extends string, T>类型。如果您对不同的字段有不同的类型,则可以使用联合类型:

type ILocaleStringsProvider = 
    Record<'foo'|'bar'|'baz'|'blablabla',string> &
    Record<'foo2'|'bar2'|'baz2'|'blablabla2',number>;

答案 1 :(得分:1)

您可以使用Index,Union和in:

type ILocaleStringsProvider = {
    [i in 'foo' | 'bar' | 'baz' | 'blablabla']: string
}