如何创建一个字符串文字类型作为另一个字符串文字类型的子类型?
或者换句话说,如何从字符串文字类型中选取值来创建新类型?
Example:
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 https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys仅在选择(对象)属性键时有效。
而不是Pick
, 你可以Extract https://www.typescriptlang.org/docs/handbook/utility-types.html#extracttype-union。在这种情况下,使用字符串文字,它不会让你比&
, 尽管。
type Fish = Extract<Animal, 'goldfish' | 'lion'> // 'goldfish'
type Fish2 = Animal & ('goldfish' | 'lion') // 'goldfish'
在这两种情况下,请注意,如果您尝试选择不属于原始集的条目,则不会出现编译时错误;它将被简单地省略。和通用约束 https://www.typescriptlang.org/docs/handbook/2/generics.html#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'
游乐场链接 https://www.typescriptlang.org/play?#code/C4TwDgpgBAggdgSwLYEMA2UC8UDkBzAezQBMAzBAZwAscoAfXYAVzhVoZwjQjCpTmA4AUENCQoAMUpUsUAKIAPYACcUAY2AAeeMnQAaXIRLlq7XGgQE4OAHyjw0KdQBMsnagwAyKAAp8RMmkzHAsrHABKETFoAGUmACMKCC0AaQMAFSgIJQg4YgooFJtZdIBuKIdJaQBmWTjE5O1EDwN-YyD6c0trG3LoquoAFjqEpK13fUMAkxpOnGZWW1KgA
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)