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

typescript - 如何在TypeScript中为对象属性定义基于另一个属性值的类型约束?

冯宪
2024-07-12
type Foo = {
  type: 'string' | 'number',
  value: string | number
}

比方上面的类型,如果我想要 value 的类型在type'string' 时为 string ,在 type'number' 的时候为 number

要怎么定义这两个属性之间的类型约束?

共有2个答案

苍温文
2024-07-12

最简洁的方式是使用 TypeScript 的条件类型(也称为分发条件类型或泛型条件类型)来定义一个新的类型。

你可以看看这篇文章:https://mybj123.com/23000.html

施振海
2024-07-12
type TMap = {
  string: string,
  number: number,
}

type Foo<K extends keyof TMap> = {
  type: K,
  value: TMap[K],
}

或者简单一点:

type Foo = {
  type: 'string',
  value: string
} | {
  type: 'number',
  value: number
}
 类似资料:
  • 我想给一个对象里所有值为null的属性赋其它值,比如: 有没有大佬知道 assignDefaults 这个函数如何实现?

  • 我在挣扎。 当扩展一个类时,我可以很容易地向它添加一些新属性。 但是,当我扩展基类时,如果我想向基类的对象(简单对象的属性)添加新属性,该怎么办? 下面是一个带有一些代码的示例。 基类 派生类 现在,正如您可以从行内注释中看到的,这将激怒TypeScript。但这在JavaScript中工作。那么,实现这一目标的正确方法是什么呢?如果没有,问题是在我的代码模式本身吗?什么模式适合这个问题? 也许您

  • 今天,我意识到让数组像字典一样运行更有意义,这样我就可以通过名称而不是数字索引访问特定元素。我希望能够执行而不是(即使我声明了一个将submitButton映射到请求的索引的枚举)。 这是可行的,但我现在允许一堆欺骗我的代码库,这是很糟糕的。我希望对象知道,只有类型的东西才能放入其中。 我可以用这些字段声明一个类,因为我希望它们的数量在将来可以动态添加,所以下面的操作是不可行的。

  • 为什么需要这样AddDataType<'AlarmTips'> 才能正确获取类型? 不是已经使用 <T>进行关联了吗?

  • 这是我的代码: 我想将的值设置为,我该怎么做?我试过,

  • 我使用的是完全修补过的Visual Studio 2013。我正在尝试使用JQuery、JQueryUI和JSRender。我也在尝试使用打字。在ts文件中,我得到如下错误: 类型“{}”上不存在属性“fade div”。

  • 我希望data是否必传由A[T]是否有必传属性决定。如何做呢?

  • 我有一个web扩展,可以在窗口对象上应用自定义对象,如: 然而,在我的TypeScript文件中,当我引用< code > window . extension name 时,我得到以下错误: 但实际上它确实存在于对象上,因为它是由扩展添加的。如何让TypeScript停止对此抱怨? 有没有办法为我的整个项目全局指定新对象的类型,以便TypeScript可以使用自动完成?