如何从 TS 文字联合类型推断对象的键和值?

How to infer keys and values of an object from TS literal union type?

我有两个文字联合类型的字符串,并希望它们成为对象的可能键和值。

export type AlarmKeyword = 'R1' | 'R2';

export type ResourceTypes = 'nktw' | 'rtw' | 'nef' | 'rth' | 'hlf' | 'dlk';

新类型如下所示:

export type AlarmKeywordObject = {
  [P in AlarmKeyword]: { [T in ResourceTypes]: number };
};

但是 TS 现在抱怨这段代码:

      {
        R1: {
          rtw: 1,
        },
      }

Type '{ rtw: number; }' is missing the following properties from type '{ nktw: number; rtw: number; nef: number; rth: number; hlf: number; dlk: number; }': nktw, nef, rth, hlf, dlk

我如何确保密钥是可选的而不是所有密钥都是必需的?

谢谢!

您可以使用问号?来标记键是可选的:

type AlarmKeywordObject = {
    [P in AlarmKeyword]?: { [T in ResourceTypes]?: number }
};

Playground