如何将字符串文字类型定义为另一种字符串文字类型的子类型?

如何将字符串文字类型创建为另一种字符串文字类型的子类型?

或者换句话说,如何从字符串文字类型中选择值来创建新类型?

例子:

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'

在这两种情况下,请注意,如果您尝试选择不属于原始集合的条目,则不会出现编译时错误;它将被简单地省略。使用泛型约束( 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'

游乐场链接


以上是如何将字符串文字类型定义为另一种字符串文字类型的子类型?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>