【问题标题】:String variable value as a property in a type字符串变量值作为类型中的属性
【发布时间】:2018-05-20 00:15:59
【问题描述】:

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

例如:

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

我希望我能做到:

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

但得到错误:

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

【问题讨论】:

    标签: javascript typescript types typescript-typings


    【解决方案1】:

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

    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
    }
    

    typescript 默认库,实际上提供了一个与上面的查找类型声明等价的类型,命名为Record。使用它,您可以将类型编写为:

    type Foo2 = Record<typeof myProp, string>;
    

    【讨论】:

    • 感谢您的回答 :)
    【解决方案2】:

    您将能够在下一版本的 Typescript 发布后执行此操作。

    feature 已在 typescript@next 中可用。如果您愿意,可以通过以下方式安装它:
    npm install typescript@next --save-dev

    同时你可以使用@Titian Cernicova-Dragomir 提供的方法

    【讨论】:

    • 感谢您的回答。也许这将是我下次的解决方案,但目前@Titan 的回答拯救了我的一天
    猜你喜欢
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多