是否可以将字符串数组转换为字符串文字联合类型?

时间:2020-10-21 23:42:32

标签: typescript

是否可以将其转换为

  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,如果将renamedPropBundefined更改为'Z'status应该变成'a' | 'Z',而不是原来的'a' | 'b'

这个想法是将字符串文字包含在字符串数组的联合中,这样可以动态且容易地将'b'更改为'Z'以及添加或删除现有字符串来自工会的文字。

1 个答案:

答案 0 :(得分:2)

事后您不能申请as const。必须在创建数组或对象时完成。

如果数组来自外部来源,那么我相信答案是否定的,这是无法完成的。您始终可以获取数组中元素的类型,但是如果将数组创建为string[],则元素类型将为string,而不是文字值。

相关问题