如何在 Typescript 中创建符合特定类型的 const 对象

Too*_*ury 10 typescript

我正在寻找以下更好的解决方案......我需要这样做:

const FRUIT_PROPERTIES = {
   "apple": { color: "red" },
   "banana": { color: "yellow" }
} as const

const myFavoriteFruitColor = FRUIT_PROPERTIES.apple.color
Run Code Online (Sandbox Code Playgroud)

这很好,但我也希望 FRUIT_PROPERTIES 对象符合这样的类型:

type FruitEnum = Record<string, { color: string }>

const FRUIT_PROPERTIES: FruitEnum = {
   "apple": { color: "red" },
   "banana": { color: "yellow" }
} as const
Run Code Online (Sandbox Code Playgroud)

但这样我就失去了“苹果”和“香蕉”键的原始推断类型和自动完成功能。

所以我通过执行以下操作解决了这个问题

type FruitEnum = Record<string, { color: string }>;

const validateFruitEnum = <TParam extends FruitEnum>(param: TParam) => {
   return param;
};

const FRUIT_PROPERTIES = validateFruitEnum({
   apple: { color: 'red' },
   banana: { color: 'yellow' },
} as const)
Run Code Online (Sandbox Code Playgroud)

这样我就保留了原来的类型......

但我想知道是否有更好的方法可以做到这一点?有人有更好的解决方案吗?

Too*_*ury 3

因此 TS 在 4.9 版本中添加了这一功能。

这是新的运营商,请参阅此处的satisfies公告