TypeScript 构造函数重载返回不同的类型

不明确的

我有一个构造函数,它应该根据参数返回不同的类型。

interface B {
    hello(): string;
}

class Foo {  
    constructor(withB: boolean): Foo & B;
    constructor();
    constructor(withB?: boolean) {
        if (withB) {
            Object.assign(this, { hello() {}})
        }
    }
}

const foo1 = new Foo();
const foo3 = new Foo(true);

但它不起作用。我该怎么做?

提香·切尔尼科娃-德拉戈米尔

您不能直接定义这样的类。您可以定义常规类并将其重命名为FooImpl并声明一个常量,该常量表示具有 dirrent 重载的构造函数并将其分配FooImpl给它:

interface B {
    hello(): string;
}

class FooImpl { 
    constructor(withB?: boolean) {
        if (withB) {
            Object.assign(this, { hello() {}})
        }
    }
}

const Foo : {
    new(withB: boolean): FooImpl & B;
    new() : FooImpl;
}= FooImpl as any;


const foo1 = new Foo(); // FooImpl
const foo3 = new Foo(true); // FooImpl & B

如果您的接口只有方法,您也可以避免使用泛型并this在接口方法上指定参数,将它们的可见性限制为该类型的某些参数:

interface B {
    hello(): string;
}

class Foo<T=void> {
    private withB: T;  
    constructor(withB: T) ;
    constructor();
    constructor(withB?: boolean) {
    }
    hello(this: Foo<boolean>): string {
        return "";
    }
}


const foo1 = new Foo();
foo1.hello() // Invalid
const foo3 = new Foo(true);
foo3.hello() // Valid

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

TypeScript构造函数类型安全

来自分类Dev

具有空构造函数的TypeScript构造函数重载

来自分类Dev

基于可选参数存在的Typescript函数返回类型,而不使用函数重载

来自分类Dev

泛型类型的TypeScript函数重载

来自分类Dev

Typescript 函数返回类型中继

来自分类Dev

TypeScript中的抽象构造函数类型

来自分类Dev

为什么在TypeScript中没有重载的构造函数实现?

来自分类Dev

TypeScript Map类构造函数,其初始值不接受2种不同类型

来自分类Dev

Typescript子类函数重载

来自分类Dev

可以返回多个不同对象的函数的返回类型的更好TypeScript推断

来自分类Dev

TypeScript:覆盖具有重载的方法返回类型

来自分类Dev

具有不同返回类型的函数重载

来自分类Dev

Typescript中函数的通用返回类型

来自分类Dev

Typescript从参数返回函数的类型

来自分类Dev

从枚举参数推断Typescript函数返回类型

来自分类Dev

泛型函数的TypeScript条件返回类型

来自分类Dev

Typescript:返回预定义联合类型的函数

来自分类Dev

TypeScript-扩展函数返回的类型

来自分类Dev

Typescript函数返回NaN值但数字类型

来自分类Dev

TypeScript构造函数

来自分类Dev

在 TypeScript 中将函数类型转换为这些函数的返回类型

来自分类Dev

重载TypeScript中的联合类型

来自分类Dev

当构造函数从实现的接口接收不同的参数类型时,Typescript编译器没有错误

来自分类Dev

重载构造函数以处理不同的数据类型

来自分类Dev

TypeScript OO设计-仅在构造函数不同时使用子类

来自分类Dev

继承和TypeScript错误:X不是构造函数类型

来自分类Dev

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

来自分类Dev

使用自己的Typescript类型时,默认不是构造函数

Related 相关文章

  1. 1

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

  2. 2

    TypeScript构造函数类型安全

  3. 3

    具有空构造函数的TypeScript构造函数重载

  4. 4

    基于可选参数存在的Typescript函数返回类型,而不使用函数重载

  5. 5

    泛型类型的TypeScript函数重载

  6. 6

    Typescript 函数返回类型中继

  7. 7

    TypeScript中的抽象构造函数类型

  8. 8

    为什么在TypeScript中没有重载的构造函数实现?

  9. 9

    TypeScript Map类构造函数,其初始值不接受2种不同类型

  10. 10

    Typescript子类函数重载

  11. 11

    可以返回多个不同对象的函数的返回类型的更好TypeScript推断

  12. 12

    TypeScript:覆盖具有重载的方法返回类型

  13. 13

    具有不同返回类型的函数重载

  14. 14

    Typescript中函数的通用返回类型

  15. 15

    Typescript从参数返回函数的类型

  16. 16

    从枚举参数推断Typescript函数返回类型

  17. 17

    泛型函数的TypeScript条件返回类型

  18. 18

    Typescript:返回预定义联合类型的函数

  19. 19

    TypeScript-扩展函数返回的类型

  20. 20

    Typescript函数返回NaN值但数字类型

  21. 21

    TypeScript构造函数

  22. 22

    在 TypeScript 中将函数类型转换为这些函数的返回类型

  23. 23

    重载TypeScript中的联合类型

  24. 24

    当构造函数从实现的接口接收不同的参数类型时,Typescript编译器没有错误

  25. 25

    重载构造函数以处理不同的数据类型

  26. 26

    TypeScript OO设计-仅在构造函数不同时使用子类

  27. 27

    继承和TypeScript错误:X不是构造函数类型

  28. 28

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

  29. 29

    使用自己的Typescript类型时,默认不是构造函数

热门标签

归档