【发布时间】:2021-12-18 11:36:56
【问题描述】:
typed 字符串数组如何根据实际值用作 literal 类型的联合?在高层次上,我有一个像 ['hello', 'world'] 这样的类型化数组,我想从中推断出一种新类型的 'hello' | 'world'。
const someArray: Readonly<Array<string>> = ['hello', 'world'] as const;
type SomeType = typeof someArray[number]; // string
SomeType 现在将被推断为string 而不是联合。如何推断文字类型的联合?
这个问题与TypeScript array to string literal type 非常相似,不同之处在于数组是typed。我无法删除它。下面的代码可以工作,但someArray 实际上输入为Array<string>。
const someArray = ['hello', 'world'] as const;
type SomeType = typeof someArray[number]; // 'hello' | 'world'
有没有办法相应地缩小推断类型?
edit:这个例子显然被简化了。我使用需要一组对象的第三方库。这些是由第三方键入的,如果不失去类型支持,我无法更改它。我意识到它可以在没有类型的情况下工作,但我无法真正删除它。
【问题讨论】:
-
你已经找到了所有的答案——如果编译器必须继续运行的是
string[],那么它显然没有创建联合的信息。 -
Readonly<Array<string>>的优先级高于as const。 -
@HarunYilmaz 不,它没有。我知道它可以在没有类型的情况下工作,但我无法实际删除它(请参阅我的编辑)。我的问题是是否以及如何使用 类型来完成。
-
它不能,添加类型显式覆盖编译推断的任何内容。您必须显式键入元组(通过更改类型或显式转换为元组)或完全删除类型。
标签: typescript typeof