TypeScript array to string literal type询问并接收关于如何在数组声明时创建字符串文字的答案。我想知道是否可以从 * 已经存在 * 的数组创建字符串文字。
举一个基本的例子:
const furniture = ['chair', 'table', 'lamp'];
type Furniture = 'chair' | 'table' | 'lamp';
在声明时建议的已知解决方案是:
const furniture = ['chair', 'table', 'lamp'] as const;
这将数组锁定为readonly
。是否可以直接获取数组并从中创建一个新项?
const furniture = ['chair', 'table', 'lamp'];
const furntureLiteral = furniture as const;
// Yields: "readonly [string[]]" typing.
// Wanted: "readonly ["chair", "table", "lamp"]" typing.
或者是因为静态类型而不可能实现?
1条答案
按热度按时间3htmauhk1#
您希望将
furniture
用于两个不同的目的:记住它初始化的值的字符串文字类型,但也可以在将来保存任意其他字符串。TypeScript并没有真正为您提供使用单个变量完成这两项工作的灵活性。最简单的方法可能是有两个变量,一个用于一种用途。您可以通过
const
Assert来跟踪初始化器,该Assert“锁定”结果变量:然后将其复制到一个可变的字符串数组中,这样你就可以做任何你想做的事情:
现在你已经分离了关注点,TypeScript编译器也很满意。
Playground代码链接