Typescript中的默认泛型类型派生

沉默之剑

为什么“ value.type”会引发错误“类型“ P”上不存在属性“类型””

class A<T extends {}, P = { type: keyof T, value: T[keyof T] }> {
  constructor (value: P) {
    if (value.type) {

    }
  }
}

使用扩展可以:

class A<T extends {}, P extends { type: keyof T, value: T[keyof T] }> {
  constructor (value: P) {
    if (value.type) {

    }
  }
}
福特04

通用类型参数默认值(情况1)与通用约束(情况2)不同。

情况1:类型参数默认

class A<P = { type: string, value: unknown }> {
  constructor(value: P) {
    if (value.type) { } // error, 'type' does not exist on type 'P' (good!)
  }
}

new A({ foo: "bar" })  // P is { foo: string; }, cannot rely on 'type' to be present.

您不能依靠在这里P拥有type财产。仅当调用者未设置type参数(无法推断且未手动设置)时,才选择默认值。但这取决于调用方。

情况2:一般约束

class AExtends<P extends { type: string, value: unknown }> {
  constructor(value: P) {
    if (value.type) { } // works
  }
}

new AExtends({ value: "bar" }) // error, 'type' is missing
new AExtends({ type: "foo", value: "bar" }) // works

编译器可以确保value: P始终具有一个property type它由约束条件强制执行extends { type: keyof T, value: T[keyof T] }

代码示例(稍微简化了代码;例如T,不需要)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

性能:从泛型派生的类型

来自分类Dev

TypeScript中泛型的深度条件类型

来自分类Dev

TypeScript 中的泛型类型继承

来自分类Dev

泛型类型推断的 Typescript 泛型

来自分类Dev

派生类型和泛型

来自分类Dev

C#派生泛型类型参数

来自分类Dev

通过TypeScript中的另一个泛型类型保留泛型类型

来自分类Dev

通过TypeScript中的另一个泛型类型保留泛型类型

来自分类Dev

在Typescript中的泛型类中初始化泛型类型

来自分类Dev

Typescript推断泛型中的泛型

来自分类Dev

TypeScript泛型:React中具有联合类型的道具

来自分类Dev

从TypeScript中的泛型类型获取构造函数/实例

来自分类Dev

如何在TypeScript泛型中动态指定类型?

来自分类Dev

Typescript中具有泛型的子类型约束

来自分类Dev

TypeScript中参数类型和泛型之间的区别

来自分类Dev

如何在TypeScript中返回泛型类型

来自分类Dev

是否可以在TypeScript中递归地推断泛型类型?

来自分类Dev

TypeScript泛型:React中具有联合类型的道具

来自分类Dev

如何缩小Typescript中泛型类型的并集?

来自分类Dev

如何在 TypeScript 中实例化泛型类型?

来自分类Dev

TypeScript 中泛型类型的返回构造函数

来自分类Dev

使用 TypeScript checkJs 在 JSDoc 中扩展泛型类型的方法?

来自分类Dev

检查对象是否是 Typescript 中的泛型类型

来自分类Dev

Scala中方法的默认泛型类型

来自分类Dev

Typescript:泛型,使用泛型扩展类型

来自分类Dev

泛型中的类型安全

来自分类Dev

Action中的泛型类型?

来自分类Dev

reactjs中的泛型类型

来自分类Dev

Scala中的泛型类型