我尝试创建一个具有变量值作为属性的类型

例如:

const myProp: string = 'my prop';
type Foo ={
    [myProp]: string
};


我希望我能做到:

const test: Foo = {
   [myProp] = myProp
}


但是出现以下错误:


  [ts]类型文字中的计算属性名称必须直接引用
  内置符号。

最佳答案

如果要声明与字符串常量具有相同属性名称的类型,则可以使用以下语法(查找类型语法)

const myProp = 'my prop';
type Foo = {
    [P in typeof myProp]: string
};
const test: Foo = {
    [myProp]: myProp
}


如果您想拥有其中几个键,则可以使用联合类型:

const myProp = 'my prop';
const otherProp = "otherProp"
type Foo = {
    [P in (typeof myProp | typeof otherProp)]: string
};
const test: Foo = {
    [myProp]: myProp,
    [otherProp]: otherProp
}


打字稿默认库实际上提供了与上述查找类型声明等效的类型,名为Record。使用此方法,您可以将类型写为:

type Foo2 = Record<typeof myProp, string>;

08-19 10:42