我定义了一个字符串文字类型,对于另一个类型,它需要一个字符串文字,但是在该实例中只接受一个特定的字符串.所以现在我在想,我怎么才能最好地定义它.

示例:

type MyStrings = 'A' | 'B' | 'C';

// Option 1
type MyOtherType1 = {
  type: MyStrings;
  whatever: string;
}

// Option 2
type MyOtherType2 = {  
  type: 'A';
  whatever: string;
}

在选项1中,我保留对原始类型的引用,在选项2中,我确保只传递正确的类型. 有没有什么地方我可以只指定一个字符串,同时仍然引用类型的来源?

推荐答案

最好的方法是Extract个您想要的成员:

type MyOtherType = {
  type: Extract<MyStrings, 'A'>;
  whatever: string;
}

这样一来,您仍在使用MyStrings,但是,如果随后对其进行更新,使得'A'不再是成员,尽管Extract本身不会失败(只会是never),任何试图将'A'分配给type的操作都将开始显示错误.

或者,根据特定的上下文:

  • 您可以Exclude个您想要的成员(Exclude<MyStrings, 'B' | 'C'>),那么随后添加的任何成员也将是有效值;或者
  • 你可以把type SomeOfMyStrings = 'A'减为type MyStrings = SomeOfMyStrings | 'B' | 'C'.

Typescript相关问答推荐

如何在不使用变量的情况下静态判断运算式的类型?

Angular 17 -如何使用新的@if语法在对象中使用Deliverc值

如何防止TypeScript允许重新分配NTFS?

找不到带名称的管道''

如何使用泛型类型访问对象

如何使用泛型自动推断TS中的类型

Angular 自定义验证控件未获得表单值

对象类型的TypeScrip隐式索引签名

类型推断对React.ForwardRef()的引用参数无效

Typescript -返回接口中函数的类型

tailwind css未被应用-react

从类型脚本中元组的尾部获取第n个类型

为什么在泛型方法中解析此promise 时会出现类型错误?

使用来自API调用的JSON数据的Angular

类型脚本中参数为`T`和`t|unfined`的重载函数

基于属性值的条件类型

如何在Vue动态类的上下文中解释错误TS2345?

Typescript:是否将联合类型传递给重载函数?

可选通用映射器函数出错

TS2532:对象可能未定义