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

Typescript 如何将字符串文字类型定义为另一个字符串文字类型的子类型?,typescript,Typescript,如何创建字符串文字类型作为另一个字符串文字类型的子类型 或者换句话说,如何从字符串文字类型中选取值来创建新类型 例如: 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' type An

如何创建字符串文字类型作为另一个字符串文字类型的子类型

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

例如:

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'
type Animal='金鱼'|'金枪鱼'|'大象'
//我想使用Pick:

键入Fish=仅在选择(对象)属性键时拾取有效。

而不是
拾取
,您可以。在这种情况下,对于字符串文本,它只会给您带来
&

type Fish=Extract(
extends
)您可以编写自己的
子集
类型来实现这一点

类型子集=T;

键入Fish3=Subset

而不是
拾取
,您可以。在这种情况下,对于字符串文本,它只会给您带来
&

type Fish=Extract(
extends
)您可以编写自己的
子集
类型来实现这一点

类型子集=T;

键入Fish3=Subset

您能澄清您的限制吗?您可以简单地将其作为一个单独的文本,如
typefish='goldfish'|'tuna',或作为一个交叉点,如
type Fish=Animal&('goldfish'|'lion')。我已将所需结果添加到问题中,可能不清楚。你说得对,我想要
type Fish='goldfish'|'tuna'作为最终结果,但我想从
Animal
中选取值以强制执行正确的值。您能澄清您的限制吗?您可以简单地将其作为一个单独的文本,如
typefish='goldfish'|'tuna',或作为一个交叉点,如
type Fish=Animal&('goldfish'|'lion')。我已将所需结果添加到问题中,可能不清楚。你说得对,我想要
type Fish='goldfish'|'tuna'
作为最终结果,但我想从
Animal
中选取值来强制执行正确的值。这正是我需要的,谢谢Jeff。出于好奇,您知道为什么内置实用程序类型不支持此功能吗?字符串文字类型很受欢迎,直觉上我希望它们也适用于此…@rei很乐意提供帮助!我没有一个很好的答案来解释为什么这不是内置的,但幸运的是,它很容易编写自己的。使用两个通用参数并返回一个未修改的参数有点不寻常;如果我猜一个建议的替代方案,它将是定义字符串联合而不检查,将调用站点键入Animal,并让TS在调用站点而不是类型定义上强制执行。当然,这会将错误传播到问题/修复之外,因此在这种情况下,子集(或AnimalSet,如果您制作了一个特定的子集)可能会更好,但代价是需要一行额外的代码来定义子集。这正是我需要的,谢谢Jeff。出于好奇,您知道为什么内置实用程序类型不支持此功能吗?字符串文字类型很受欢迎,直觉上我希望它们也适用于此…@rei很乐意提供帮助!我没有一个很好的答案来解释为什么这不是内置的,但幸运的是,它很容易编写自己的。使用两个通用参数并返回一个未修改的参数有点不寻常;如果我猜一个建议的替代方案,它将是定义字符串联合而不检查,将调用站点键入Animal,并让TS在调用站点而不是类型定义上强制执行。当然,这会将错误传播到问题/修复之外,因此在这种情况下,子集(或AnimalSet,如果您创建了一个特定的子集)可能会更好,但代价是需要额外一行代码来定义子集。