作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何创建一个字符串文字类型作为另一个字符串文字类型的子类型?
或者换句话说,我如何从字符串文字类型中选取值来创建新类型?
例子:
type Animal = 'goldfish' | 'tuna' | 'elephant'
// I would like to use Pick:
type Fish = Pick<Animal, 'goldfish', 'tuna'>
// So that the desired result is: 'goldfish | 'tuna'
但是,这不起作用,因为 Pick仅在选择(对象)属性键时有效。
最佳答案
而不是Pick
,您可以Extract
.不过,在这种情况下,对于字符串文字,它不会让您比 &
走得更远。
type Fish = Extract<Animal, 'goldfish' | 'lion'> // 'goldfish'
type Fish2 = Animal & ('goldfish' | 'lion') // 'goldfish'
在这两种情况下,请注意,如果您尝试选择不属于原始集合的条目,则不会出现编译时错误;它将被简单地省略。用generic constraints (extends
)您可以编写自己的 Subset
类型来实现这一点。
type Subset<K, T extends K> = T;
type Fish3 = Subset<Animal, 'goldfish' | 'lion'>; // compile error
type Fish4 = Subset<Animal, 'goldfish' | 'tuna'>; // 'goldfish' | 'tuna'
关于typescript - 如何将字符串文字类型定义为另一种字符串文字类型的子类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67628495/
我是一名优秀的程序员,十分优秀!