TypeScript如何将运行时数组元素作为接口属性的允许取值
解决方案
- 首先给数组添加
as const常量断言,锁定数组的字面量元组类型,避免TypeScript自动将数组类型拓宽为string[]:
const list = ["bell", "edit", "log-out"] as const;
- 接着用
typeof list[number]提取数组所有元素组成的联合类型,赋值给prop属性即可:
interface SomeInterface { prop: typeof list[number] }
说明
- 实现效果和你之前手写的
"bell" | "edit" | "log-out"完全一致,后续修改list数组的元素,prop的允许取值范围会同步更新。 - 注意:该方案仅适用于
list的值在编译阶段就能完全确定的场景,如果list是运行时动态生成的内容,TypeScript作为静态类型检查工具无法获取运行时数据,无法实现该需求。
内容的提问来源于stack exchange,提问作者Mateusz Czarczyński
相关产品推荐
相关产品推荐

