我已经开始学习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);
}
}
答案 0 :(得分:0)
我将答案分为可以做和不能做,如下:
可以:
您可以将派生类(Snake)参数类型更改为any
,可以使用或不使用初始化值,如下所示:
move(dinstanceInMeters: any = '5'): void {
或move(dinstanceInMeters: any): void {
您可以将派生类(Snake)的返回值更改为所需的任何值,例如:
move(dinstanceInMeters: any = '5'): string {
(请参见下面DEMO中的Snake
类可以做的1和2。)
不能做:
无法将派生类(蛇)参数类型更改为any
以外的其他类型,如下所示:
move(dinstanceInMeters: string = '5'): void {
编译时错误:
类型为“蛇”的属性“移动”不能分配给基本类型为“动物”的相同属性。 类型'(dinstanceInMeters ?:字符串)=>字符串'不能分配给类型'(dinstanceInMeters ?:数字)=>无效'。 参数“ dinstanceInMeters”和“ dinstanceInMeters”的类型不兼容。 不能将“数字”类型分配给“字符串”类型。 (方法)Sname.move(dinstanceInMeters ?:字符串):字符串
(请参见下面的DEMO中的Dog
类。)
您不能向派生类(Snake)移动函数添加另一个参数,如下所示:
move(dinstanceInMeters: number = 5, anotherParam: any): void {
编译时错误:
类型为“蛇”的属性“移动”不能分配给基本类型为“动物”的相同属性。 类型'(dinstanceInMeters:number,anotherParam:any)=>字符串'不能分配给类型'(dinstanceInMeters ?: number)=> void'。 (方法)Snake.move(dinstanceInMeters:数字,anotherParam:任意):字符串
(请参见下面的DEMO中的Cat
类。)
在代码中添加了StackBlitz DEMO project,以查看其运行效果。