TypeScript继承函数的类型

时间:2018-12-13 18:44:45

标签: typescript

我已经开始学习TypeScript,并且我有一个与函数或参数有关的问题。是否有必要使用我们在类中具有哪种参数类型来扩展其他类,如下所示?还是可以只使用要移动的函数类型,即该函数是无效的,并且在该类中继承了该类的东西并不相同?

class Animal {
    name: string;
    constructor(_name: string) {
        this.name = _name;
    }

    move(dinstanceInMeters: number = 0): void {
        console.log(`${this.name} moved ${dinstanceInMeters}m.`);
    }
}

class Snake extends Animal {
    constructor(_name: string) {
        super(_name);
    }

    move(dinstanceInMeters: number = 5): void {
        console.log(`Slithering...`);
        super.move(dinstanceInMeters);
    }
}

1 个答案:

答案 0 :(得分:0)

我将答案分为可以做不能做,如下:

可以

  1. 您可以将派生类(Snake)参数类型更改为any,可以使用或不使用初始化值,如下所示:

    move(dinstanceInMeters: any = '5'): void {move(dinstanceInMeters: any): void {

  2. 您可以将派生类(Snake)的返回值更改为所需的任何值,例如: move(dinstanceInMeters: any = '5'): string {

    (请参见下面DEMO中的Snake类可以做的1和2。)

不能做

  1. 无法将派生类(蛇)参数类型更改为any以外的其他类型,如下所示: move(dinstanceInMeters: string = '5'): void {

    编译时错误:

      

    类型为“蛇”的属性“移动”不能分配给基本类型为“动物”的相同属性。   类型'(dinstanceInMeters ?:字符串)=>字符串'不能分配给类型'(dinstanceInMeters ?:数字)=>无效'。   参数“ dinstanceInMeters”和“ dinstanceInMeters”的类型不兼容。     不能将“数字”类型分配给“字符串”类型。   (方法)Sname.move(dinstanceInMeters ?:字符串):字符串

    (请参见下面的DEMO中的Dog类。)

  2. 您不能向派生类(Snake)移动函数添加另一个参数,如下所示: move(dinstanceInMeters: number = 5, anotherParam: any): void {

    编译时错误:

      

    类型为“蛇”的属性“移动”不能分配给基本类型为“动物”的相同属性。   类型'(dinstanceInMeters:number,anotherParam:any)=>字符串'不能分配给类型'(dinstanceInMeters ?: number)=> void'。   (方法)Snake.move(dinstanceInMeters:数字,anotherParam:任意):字符串

    (请参见下面的DEMO中的Cat类。)

在代码中添加了StackBlitz DEMO project,以查看其运行效果。