当前位置: 首页 > 知识库问答 >
问题:

typescript 中可以通过 infer 解构出 union 对象中指定的某个值的部分类型吗?

王泓
2024-08-11

如下的 example,我期望可以通过 NewData 这个类型根据 key 取出原始 Data 中对应的值的类型,但是得到的是 never,这是 typescript 的问题吗,可以有其他的办法实现期待的功能吗,求解

https://www.typescriptlang.org/play/?ts=5.6.0-beta#code/C4TwD...

共有2个答案

宿楚青
2024-08-11
type Data =
  | {
      key: 'a'
      value: string
    }
  | {
      key: 'b'
      value: number
    }

type NewData<T extends Data["key"]> = {
    newKey: T,
    value: Extract<Data, { key: T }>['value']
}

type ExpectValueNumber = NewData<"b">["value"] // number
江宏深
2024-08-11

这个链接可能存在安全风险,为了保护您的设备和数据安全,请避免访问此链接。

 类似资料:
  • 这是一个不同于TypeScript中对象字面量中的类型定义的问题 我有一个接口,接受任何对象作为其属性之一: 虽然属性可以是任何东西,但有时我想指定某些类型。我不想使用'as'关键字,因为我不想强制它(如果我缺少一个属性,我想看到错误)。 我有一种方法可以做到: 但是有没有办法在不使用类型断言的情况下将选项内联在 对象文本中同时做到这一点?换句话说,我想这样做:

  • 下面有一个解构赋值,[invoice, customers] 中两个元素的推断类型分别是 const invoice 和 const customers: 现在我要把下面两个类型手动指定给 [invoice, customers] 中对应的元素,即 invoice 的类型为 InvoiceForm,customers 的类型为 CustomerField,语法应该怎么写?

  • 在TypeScript类中,可以为属性声明类型,例如:

  • 问题内容: 为什么这是错误的: ? 给定一个类对象,没有办法实例化特定类型的类吗? 显然,我永远不会直接这样做,这只是显示所需内容的一个示例。在实际的代码中,我需要不知道类型的名称。例如 问题答案:

  • 写一个名为Circle的类。该类需要一个名为radius的类型为double的字段(实例变量) 该类需要有一个参数半径为double类型的构造函数,并且需要初始化字段。 如果半径参数小于0,则需要将半径字段值设置为0。 编写以下方法(实例方法): 方法名为getRadius,没有任何参数,需要返回半径字段的值。 名为getArea的方法,没有任何参数,需要返回计算的面积(半径*半径*PI)。对于P

  • TypeScript中非抽象类(非抽象构造函数)的类型签名如下: 这也称为可更新类型。但是,我需要一个抽象类(抽象构造函数)的类型签名。我理解它可以定义为具有类型,但这太宽泛了。难道没有更精确的替代方案吗? 编辑: 为了阐明我的意思,下面的小片段演示了抽象构造函数和非抽象构造函数之间的区别: 类型'typeof实用程序'不能分配给类型'new(... args: any[])= 无法将抽象构造函数

  • 我将得到列表对象的字符串,我想转换为列表对象。有没有办法把那个字符串转换成列表?