是否可以将其转换为
const readonlyArray: readonly ['a', 'b', 'c'] = ['a', 'b', 'c'] as const;
type DesiredType = typeof readonlyArray[number];
类似:
const array = ['a', 'b', 'c']; // this will come dynamically and sometimes it will be ['a', 'e', 'f']
const readonlyArray = array as const;
type DesiredType = typeof readonlyArray[number];
我认为这是不可能的,但是您有类似的解决方案可以完成相同的工作吗?
这是现实世界问题的简化版本:
我有一个带有2个道具的React组件-status: 'a' | 'b'
,renamedPropB?: string
,如果将renamedPropB
从undefined
更改为'Z'
, status
应该变成'a' | 'Z'
,而不是原来的'a' | 'b'
。
这个想法是将字符串文字包含在字符串数组的联合中,这样可以动态且容易地将'b'
更改为'Z'
以及添加或删除现有字符串来自工会的文字。
答案 0 :(得分:2)
事后您不能申请as const
。必须在创建数组或对象时完成。
如果数组来自外部来源,那么我相信答案是否定的,这是无法完成的。您始终可以获取数组中元素的类型,但是如果将数组创建为string[]
,则元素类型将为string
,而不是文字值。