首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在typescript中通过this从派生类型调用构造函数

在 TypeScript 中,通过 this 关键字从派生类型调用构造函数是一种特殊的语法,称为 "交叉类型构造函数"。它允许我们在派生类的构造函数中调用基类的构造函数,并且可以确保正确的继承关系。

具体来说,当我们在派生类的构造函数中使用 this 关键字调用基类的构造函数时,我们需要使用 super() 方法。这样可以确保基类的构造函数被正确地调用,并且可以传递必要的参数。

以下是一个示例代码:

代码语言:txt
复制
class BaseClass {
  constructor(public name: string) {}
}

class DerivedClass extends BaseClass {
  constructor(public age: number) {
    super("John"); // 调用基类的构造函数
  }
}

const instance = new DerivedClass(25);
console.log(instance.name); // 输出: John
console.log(instance.age); // 输出: 25

在上面的示例中,DerivedClass 继承自 BaseClass,并且在构造函数中调用了 super("John"),这样就可以将参数 "John" 传递给基类的构造函数。

这种通过 this 调用基类构造函数的方式在 TypeScript 中非常常见,特别是在使用类继承时。它可以确保派生类正确地继承基类的属性和方法,并且可以在派生类的构造函数中进行额外的初始化操作。

腾讯云相关产品和产品介绍链接地址:

请注意,以上仅为示例产品,腾讯云还提供更多丰富的云计算产品和服务,可根据具体需求选择适合的产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Android 逆向】函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过实际被调用函数添加跳转代码实现函数拦截 )

文章目录 一、通过修改 GOT 全局偏移表拦截函数 二、通过实际被调用函数添加跳转代码实现函数拦截 一、通过修改 GOT 全局偏移表拦截函数 ---- 使用 GOT 全局偏移表 拦截函数 , 只需要将...GOT 表函数地址 指向 我们 自定义的 拦截函数 即可 ; 当调用 指定的 需要被 拦截的函数时 , 就会调用我们 自定义的 拦截函数 , 之后再调用 自定义的处理函数 , 处理函数有如下处理方式...通过 远程调用 执行该函数 ), 使用 dlopen 函数直接加载 libbridge.so 动态库 , 然后调用 dlsym 函数 , 获取 libbridge.so 动态库的 load 函数地址..., 根据该函数地址 , 可以直接调用函数 , 这样就完美的避开了 GOT 全局偏移表 , 而执行函数 ; 因此 , 使用 GOT 表拦截函数并不能保证 100% 成功 ; 二、通过实际被调用函数添加跳转代码实现函数拦截...---- 实际的被调用函数 , 添加 跳转代码 , 跳转到 拦截函数 , 然后 拦截函数 调用 处理函数 , 处理函数调用真正的实际函数 , 返回一个返回值 ; 该跳转代码添加的方式是

1.8K20

TypeScript 官方手册翻译计划【十二】:类

TypeScript 不会分析构造调用的方法以检测初始化语句,因为派生类可能会重写这些方法,导致初始化成员失败。...— 它返回的类型始终是类实例的类型 super 调用 和 JavaScript 一样,如果你有一个基类和一个派生类,那么派生类中使用 this....这是因为诸如 Error、Array 这样的构造函数使用了 ES6 的 new.target 去调整原型链,但是, ES5 调用构造函数的时候,没有类似的方法可以确保 new.target 的值。...在这个例子,由于我们通过 obj 引用去调用函数,所以它的 this 的值是 obj,而不是类实例。 这通常不是我们期望的结果!...有时候你想要接受一个类构造函数作为参数,让它产生某个类的实例,并且这个类是某个抽象类派生过来的。

2.5K10

【愚公系列】2021年12月 Typescript-类的使用(封装,继承,多态)

文章目录 一、TS类的定义 1. ES5的构造函数 2. ES6的构造函数 2. TS的构造函数,需要添加类型 3. 继承 4....TS的构造函数,需要添加类型 我们声明一个 Cat类。这个类有4个成员:一个叫做 name,color的属性,一个构造函数和一个 eat方法。...它会调用之前定义的构造函数,创建一个 Cat类型的新对象,并执行构造函数初始化它。 3....派生类包含了一个构造函数,它 必须调用 super(),即在构造函数里访问 this 的属性之前, 我们一定要调用 super(),它会执行基类的构造函数。...在当前类里面、子类里面可以访问 ,类外部没法访问 private 私有的 在当前类里面可以访问,子类、类外部都没法访问 constructor:类的构造函数类被实例化时仅被调用一次,类外部无法使用

49920

TypeScript手记(四)

最后一行,我们使用 new 构造了 Greeter 类的一个实例。它会调用之前定义的构造函数,创建一个 Greeter 类型的新对象,并执行构造函数初始化它。...与前一个例子的不同点是,派生类包含了一个构造函数,它 必须调用 super(),它会执行基类的构造函数。而且,构造函数里访问 this 的属性之前,我们 一定要调用 super()。...AccountingDepartment extends Department { constructor() { super('Accounting and Auditing') // 派生类的构造函数必须调用...高级技巧 构造函数 当你 TypeScript 里声明了一个类的时候,实际上同时声明了很多东西。...我们也创建了一个叫做构造函数的值。这个函数会在我们使用 new 创建类实例的时候被调用

48630

TypeScript 之 Class(下)

在这个例子,因为函数通过 obj 被调用,所以 this 的值是 obj 而不是类实例。 这显然不是你所希望的。TypeScript 提供了一些方式缓解或者阻止这种错误。...你不能在派生类使用 super.getName ,因为原型链并没有入口可以获取基类方法。...调用 this 类型(this Types) ,有一个特殊的名为 this 的类型,会动态的引用当前类的类型,让我们看下它的用法: class Box { contents: string...复制代码 现在 TypeScript 会正确的告诉你,哪一个类构造函数可以被调用,Derived 可以,因为它是具体的,而 Base 是不能的。...一个结构化类型系统,没有成员的类型通常是任何其他类型的父类型

89200

初探 TypeScript函数基本类型泛型接口类内置对象

: 参数类型和返回值类型 TypeScript类型定义, => 用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型,和 ES6 的箭头函数不一样 可选参数和默认参数 TypeScript... JavaScript 里面 this 的值函数调用的时候指定。...Greeter 类的一个实例,调用之前定义的构造函数,创建一个Greeter 类型的新对象,执行构造函数初始化他 继承 通过继承来扩展现有的类,基类通常被称作超类(Animal),派生类常被称作子类(...,他必须调用 super() ,他会执行基类函数构造函数里访问 this 的属性前,一定要调用 super() 。...项目开发过程,我写了一个公共的方法用来解析后端传我的数据格式,忽然有一天某个后端给我的数据结构字符串变成了数组,就那么一两个接口的的数据结构变了,大部分的数据结构没有变。

7.3K31

TypeScript 类的理解及应用场景

JavaScript 基于原型的方式让开发者多了很多理解成本 ES6 之后,JavaScript 拥有了 class 关键字,虽然本质依然是构造函数,但是使用起来已经方便了许多 但是 JavaScript...构造函数: 类实例化时调用,可以为类的对象分配内存。...受保护 protect:除了该类的内部可以访问,还可以子类仍然可以访问 私有修饰符 只能够该类的内部进行访问,实例对象并不能够访问 并且继承该类的子类并不能访问,如下图所示: 受保护修饰符 跟私有修饰符很相似...,实例对象同样不能访问受保护的属性,如下: 有一点不同的是 protected 成员子类仍然可以访问 除了上述修饰符之外,还有只读修饰符 只读修饰符 通过readonly关键字进行声明,只读属性必须在声明时或构造函数里被初始化...,如下: 除了实例属性之外,同样存在静态属性 静态属性 这些属性存在于类本身上面而不是类的实例上,通过static进行定义,访问这些属性需要通过 类型.静态属性 的这种形式访问,如下所示: class

11910

typescript 多继承_说明类的继承和多态有什么作用

这个类有3个属性、一个构造函数和一个sayHi方法。 我们使用new构造了Person类的一个实例。它会调用构造函数,创建一个Person类型的新对象,并执行构造函数初始化它。...最后通过person对象调用其sayHi方法 继承 TypeScript 里,我们可以使用常用的面向对象模式。 基于类的程序设计中一种最基本的模式是允许使用继承来扩展现有的类。...TypeScript里,成员都默认为 public。 你也可以明确的将一个成员标记成 public。...理解 protected protected 修饰符与 private 修饰符的行为很相似,但有一点不同,protected成员派生仍然可以访问。...p.lastName = 'D' console.log(p.fullName) p.fullName = 'E_F' console.log(p.firstName, p.lastName) 静态属性 静态成员:通过

1.2K20

TS 进阶 - 类型基础

# void 类型 TypeScript ,一个没有返回值(即没有调用 return 语句)的函数,其返回值类型应该被标记为 void 而不是 undefined,尽管它的实际值就是 undefined...拥有多个重载声明的函数在被调用时,是按照重载的声明顺序往下查找的。 TypeScript 的重载更像伪重载,只有一个具体的实现,其重载体现在方法调用的签名上而不是具体实现细节上。...为了简单,可以构造函数对参数应用访问性修饰符。参数会被直接作为类的成员(即实例的属性),不需要再手动添加属性和赋值。...派生类可以访问使用 public 或 protected 修饰符的基类成员。除了访问外,派生类可以覆盖基类的方法,但仍然可以通过 super 来调用基类的方法。...,而不是通过 new 实现,可以使用私有构造函数

1.7K50

TypeScript 演化史 — 第十章】更好的空值检查 和 混合类

TypeScript 2.2 之前,下面这个函数是可以很好地编译通过的: function isValidPasswordLength( password: string, min: number...混合类的构造函数 (如果有) 必须有且仅有一个类型为any[]的变长参数, 并且必须使用展开运算符super(...args)调用中将这些参数传递。 定义完成之后,来研究一些代码。...注意,TBase 必须与Constructor兼容,即类型必须能够构造某些东西。 函数,咱们创建并返回一个派生自Base的新类。这种语法乍一看可能有点奇怪。...咱们的例子,它初始化 tag 属性。 混合构造函数类型指仅有单个构造函数签名,且该签名仅有一个类型为 any[] 的变长参数,返回值为对象类型....继承多个基类 JS 不行的,因此 TypeScript也不行。

2.6K10

C#到TypeScript - 类

C#到TypeScript - 类 ES6之前Javascript的类都是用function定义的,ES6把类关键字正式加进来,虽说其实也还是function,不过代码可读性上好了不少。...u.checkLogin()); // true u.name = 'test'; console.info(u.checkLogin()); // false 参数属性 上面的User类有两个成员,而且都是构造函数赋值的...类里面的那两个属性其实可以不用写,只要在构造函数的参数上加上操作限定符,TypeScript就会自动为参数生成属性,来重构下上面的User。...Admin的checkName 另外,继承时还需要注意,如果派生类里有构造函数,则构造函数必须要调用父类的构造函数:super()。...兼容性 TypeScript里的类是有兼容性的,这点和C#很不一样,TypeScript认为:只有成员的类型是兼容的,那它们的类型也是兼容的。

1K90

TypeScript 演化史 -- 10】更好的空值检查 和 混合类

TypeScript 2.2 之前,下面这个函数是可以很好地编译通过的: function isValidPasswordLength( password: string, min: number...混合类的构造函数 (如果有) 必须有且仅有一个类型为any[]的变长参数, 并且必须使用展开运算符super(...args)调用中将这些参数传递。 定义完成之后,来研究一些代码。...注意,TBase 必须与Constructor兼容,即类型必须能够构造某些东西。 函数,咱们创建并返回一个派生自Base的新类。这种语法乍一看可能有点奇怪。...咱们的例子,它初始化 tag 属性。 混合构造函数类型指仅有单个构造函数签名,且该签名仅有一个类型为 any[] 的变长参数,返回值为对象类型....编译器可以类型检查所有的使用,并在自动完成列表建议可用的成员: 与类继承进行对比,有个区别:一个类只能有一个基类。继承多个基类 JS 不行的,因此 TypeScript也不行。

2.7K20

TypeScript的类

TypeScript,类是一种用于创建对象的蓝图,它定义了对象的属性和方法。类可以看作是对象的模板,通过实例化类可以创建具体的对象。定义类要定义一个类,可以使用 class 关键字后跟类的名称。...class Person { name: string; age: number;}构造函数构造函数是一个特殊的方法,创建对象时被调用。它用于初始化对象的属性。...const person = new Person("John", 25);类的继承TypeScript支持类的继承,可以通过继承一个基类来创建派生类。....`); }}派生类可以继承基类的属性和方法,并可以添加自己的属性和方法。访问修饰符TypeScript提供了访问修饰符来控制类的属性和方法的访问权限。...public:默认的访问修饰符,公开访问,可以类的内部和外部访问。private:私有访问,只能在类的内部访问。protected:受保护的访问,只能在类的内部和派生访问。

74030

TypeScript 演化史 — 第八章】字面量类型扩展 和 无类型导入

TypeScript 2.2 之前,下面这个函数是可以很好地编译通过的: function isValidPasswordLength( password: string, min: number...混合类的构造函数 (如果有) 必须有且仅有一个类型为any[]的变长参数, 并且必须使用展开运算符super(...args)调用中将这些参数传递。 定义完成之后,来研究一些代码。...注意,TBase 必须与Constructor兼容,即类型必须能够构造某些东西。 函数,咱们创建并返回一个派生自Base的新类。这种语法乍一看可能有点奇怪。...咱们的例子,它初始化 tag 属性。 混合构造函数类型指仅有单个构造函数签名,且该签名仅有一个类型为 any[] 的变长参数,返回值为对象类型....继承多个基类 JS 不行的,因此 TypeScript也不行。

4.5K10

TypeScript的继承(一)

TypeScript,继承是一种机制,通过该机制,一个类可以继承另一个类的属性和方法。这使得代码重用和层次化组织变得更加容易。基本继承要让一个类继承另一个类,可以使用 extends 关键字。...派生类(子类)继承基类(父类)的属性和方法,并可以添加自己的属性和方法。...调用基类的构造函数派生类的构造函数,可以使用 super 关键字来调用基类的构造函数,并传递参数。...Dog extends Animal { breed: string; constructor(name: string, breed: string) { super(name); // 调用基类的构造函数...this.breed = breed; }}在上面的例子,Dog 类的构造函数使用 super(name) 来调用 Animal 类的构造函数,并传递 name 参数。

29120
领券