【问题标题】:Dynamic interface key with TypeScript带有 TypeScript 的动态界面键
【发布时间】:2017-08-14 11:11:03
【问题描述】:

我想动态定义接口的对象键,其中键名来自变量。

有什么办法吗?

const key1 = 'hello';
const key2 = 'world';

interface MyInterface {
  [key1]: {};
  [key2]: string;
}

const myObject: MyInterface = {
  [key1]: {
    something: 'something',
  },
  [key2]: 'some other things'
}

我目前收到以下错误:

接口中的计算属性名称必须直接引用内置符号

谢谢。

【问题讨论】:

  • 变量值直到运行时才知道/评估。接口是编译器/静态类型检查器的纯静态信息。如果没有某种不存在的特殊“静态 Typescript 变量”,这将无法真正起作用。你为什么首先想要这个?

标签: typescript


【解决方案1】:

不,目前无法执行此操作。有一个issue on GitHub 要求这样做;你可能想去那里给它一个?。

目前,这是你能做的最接近的:

const key1 = 'hello';
const key2 = 'world';

type _MyInterface = Record<typeof key1, {}> & Record<typeof key2, string>;
interface MyInterface extends _MyInterface { }

var _myObject = {} as MyInterface;
_myObject[key1] = { something: 'something' };
_myObject[key2] = 'some other things';
const myObject = _myObject;

这或多或少与您的代码具有相同的含义,尽管更丑陋且更难遵循。

希望有所帮助;祝你好运!

【讨论】:

    猜你喜欢
    • 2021-07-03
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2021-12-04
    • 2020-11-23
    • 2011-06-19
    • 1970-01-01
    • 2021-03-26
    相关资源
    最近更新 更多