使用TypeScript实现动态接口键

4
我想动态定义我的接口对象键,其中键名来自变量。有没有办法做到这一点?
const key1 = 'hello';
const key2 = 'world';

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

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

我目前收到了上述错误信息:

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

谢谢。

TypeScript ≠ JavaScript - Endless
1
变量值在运行时才能被知道/评估。接口仅是编译器/静态类型检查器的纯静态信息。这实际上无法正常工作,除非有某种特殊的“静态TypeScript变量”,但这样的变量并不存在。你为什么要一开始就想要这个呢? - deceze
1个回答

0
目前无法实现这个功能。在 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;

这段代码的意思与你的差不多,只是更丑陋难懂一些。

希望能对你有所帮助,祝好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接