泛型扩展某个类的问题

埃尔拉波

为什么我在e4, e5, 中出现错误e6它们都匹配SomeClasstype 所以它们必须匹配 generic RES

class SomeClass {
  a: string;
  b: number;
  c: boolean;
}

class ChildOfSomeClass extends SomeClass {}

const someFunc1 = <RES extends SomeClass>() => {
  const e1: SomeClass = { a: "aaa", b: 123, c: true }; // ok
  const e2: SomeClass = new SomeClass(); // ok
  const e3: SomeClass = new ChildOfSomeClass(); // ok

  // Type '{ a: string; b: number; c: true; }' is not assignable to type 'RES'.ts(2322)
  const e4: RES = { a: "aaa", b: 123, c: true };

  // Type 'SomeClass' is not assignable to type 'RES'.ts(2322)
  const e5: RES = new SomeClass();

  // Type 'ChildOfSomeClass' is not assignable to type 'RES'.ts(2322)
  const e6: RES = new ChildOfSomeClass();
};

我最终想someFunc1返回,RES | Promise<RES>但为了这个例子,我简化了它。

pswg

RES extends SomeClass装置,该组由类型描述的值RES是一个子集的集合由类型描述的值的SomeClass想象以下场景:

class MyRES extends SomeClass {
   d: string;
}

这满足条件RES extends SomeClass,但是在您提供的任何构造函数情况下都没有分配d

有很多方法可以解决这个问题,而“正确”的解决方案将取决于您想要用这种方法完成什么。例如,一种解决方案是让您的方法采用一些构造函数或转换器方法来RES从 的已知现有属性创建一个SomeClass

const someFunc1 = <RES extends SomeClass>(toRes: (SomeClass) => RES) => {
  const e: RES = toRes({ a: "aaa", b: 123, c: true }); // ok
};

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

扩展集合泛型类的泛型类

来自分类Dev

如何将泛型类扩展为泛型

来自分类Dev

泛型和<E扩展...>问题

来自分类Dev

Typescript泛型扩展类和接口

来自分类Dev

JaxB编组通配符泛型扩展类

来自分类Dev

用泛型T扩展类

来自分类Dev

在Kotlin中扩展泛型类

来自分类Dev

使用泛型和扩展Abstract类

来自分类Dev

Java:使用泛型扩展类

来自分类Dev

CDI bean从泛型类扩展

来自分类Dev

打字稿泛型-扩展类

来自分类Dev

在java中扩展多个类的泛型

来自分类Dev

Java 泛型:如何扩展另一个泛型类的泛型类

来自分类Dev

从泛型类派生的c#问题

来自分类Dev

检查泛型参数类型是否从某个类X派生

来自分类Dev

是否可以重用某个类的泛型的类型参数

来自分类Dev

Java泛型-使用泛型函数扩展泛型类

来自分类Dev

扩展泛型类的类的错误覆盖方法

来自分类Dev

避免传递扩展泛型类的类的泛型类型参数

来自分类Dev

避免传递扩展泛型类的类的泛型类型参数

来自分类Dev

避免传递扩展泛型类的类的泛型类型参数

来自分类Dev

如何用泛型扩展抽象类?

来自分类Dev

泛型-方法返回类型作为扩展类

来自分类Dev

vb.net使用泛型扩展类

来自分类Dev

C#在方法调用中扩展泛型类

来自分类Dev

扩展泛型抽象类:正确的边界

来自分类Dev

扩展或为父类的Java泛型类型

来自分类Dev

C#在方法调用中扩展泛型类

来自分类Dev

在泛型类中扩展Interface时出现NoSuchFieldError