字符串通用约束作为计算键

时间:2019-03-03 12:40:44

标签: typescript generics

我想定义一个通用类型,我可以在其中传递一个字符串值作为通用参数,并用它来定义该类型上的键,例如:

const foo: MyType<'hello'> = {
  hello: "Goodbye",  // this key is required
  bar: 2
}

我尝试将其定义如下:

const type MyType<T extends string> = {
  [key: T]: string,
  bar: number,
};

但是我得到一个错误,说An index signature parameter type must be 'string' or 'number',即使在这种情况下也必须是字符串。这个问题有不同的语法吗?还是目前这种打字稿的局限性?

1 个答案:

答案 0 :(得分:1)

也许是这样的:

const foo: MyType<'hello'> = {
  hello: "Goodbye",  // this key is required
  bar: 2
}

type MyType<K extends string> = {
    bar: number;
} & Record<K, string>