首页 > 其他分享 >ts 构造函数类型和构造函数返回值类型的区别

ts 构造函数类型和构造函数返回值类型的区别

时间:2024-10-27 22:35:09浏览次数:5  
标签:name ts Person 实例 类型 返回值 构造函数

在 TypeScript 中,构造函数类型和构造函数返回值类型是两个不同的概念,它们分别用于描述构造函数的行为和结果。下面详细解释这两者的区别。

1. 构造函数类型

构造函数类型描述的是一个类的构造函数的签名,包括构造函数的参数类型和返回类型。它定义了如何通过 new 关键字创建一个实例。

示例

class Person {
    constructor(public name: string, public age: number) {}
}

// 构造函数类型
type PersonConstructor = new (name: string, age: number) => Person;

// 使用构造函数类型
const createPerson: PersonConstructor = Person;

const person1 = new createPerson("Alice", 30);
console.log(person1.name); // 输出: Alice

在这个例子中,PersonConstructor 是一个构造函数类型,描述了如何创建 Person 实例。

2. 构造函数返回值类型

构造函数返回值类型描述的是通过构造函数创建的实例的类型。这通常是类的实例类型,表示构造函数返回的对象的结构和行为。

示例

class Person {
    constructor(public name: string, public age: number) {}

    greet() {
        return `Hello, my name is ${this.name}.`;
    }
}

// 通过构造函数返回值类型
type PersonInstanceType = InstanceType<typeof Person>;

// 创建实例
const person2: PersonInstanceType = new Person("Bob", 25);
console.log(person2.greet()); // 输出: Hello, my name is Bob.

在这个例子中,PersonInstanceType 是通过 InstanceType<typeof Person> 提取的,表示 Person 类的实例类型。

3. 区别总结

特性 构造函数类型 构造函数返回值类型
定义 描述构造函数的参数和返回类型 描述通过构造函数创建的实例的类型
示例 new (name: string, age: number) => Person Person
用途 用于创建实例的类型描述 用于定义实例的结构和行为

4. 使用场景

  • 构造函数类型:当你需要传递构造函数作为参数或在其他地方使用构造函数时,可以使用构造函数类型。

  • 构造函数返回值类型:当你需要定义一个变量的类型,该变量将是通过构造函数实例化的对象时,使用构造函数返回值类型。

5. 代码示例结合

以下是一个结合了构造函数类型和返回值类型的示例:

class Person {
    constructor(public name: string, public age: number) {}
}

// 构造函数类型
type PersonConstructor = new (name: string, age: number) => Person;

// 创建构造函数的引用
const personConstructor: PersonConstructor = Person;

// 构造函数返回值类型
type PersonInstanceType = InstanceType<typeof Person>;

// 创建实例
const person3: PersonInstanceType = new personConstructor("Charlie", 28);
console.log(person3.name); // 输出: Charlie

在这个示例中,我们同时展示了构造函数类型和构造函数返回值类型的使用,清楚地分开了它们的角色。

标签:name,ts,Person,实例,类型,返回值,构造函数
From: https://www.cnblogs.com/jocongmin/p/18509139

相关文章

  • TypeScript 中的类既可以作为值,也可以作为类型
    TypeScript中的类既可以作为值,也可以作为类型。让我们分别详细探讨这两个方面。1.类作为值在TypeScript和JavaScript中,类实际上是构造函数的特殊形式,因此可以像其他函数一样使用。你可以将类赋值给变量、作为参数传递给函数,或者在其他上下文中使用它。示例classPerson......
  • supervision KeyPoints类及其Annotator类 Day(4)
    上一次学习完了Detection和segmentation中的Utils,今天学习关键点检测相关的方法和类KeyPoints类用于图像关键点检测的一个类,使用方法与Detection类相似,对于不同的视觉库,提供了多种讲检测结果转为KeyPoints类的方法属性:xy:形状为(n,m,2)的数组,n表示检测到n个对象,m表示该对象由m......
  • 数据类型与变量
    1.字面常量  常量即程序运行期间,固定不变的量称为常量publicclassTest{ publicstaticvoidmain(String[]args){    System.Out.println("helloworld!");   // 字符串常量:由""括起来的   System.Out.println(100);      ......
  • client-go DiscoveryClient和ClientSet长连接数
    packagemainimport( "context" "test/signals" "time" core_v1"k8s.io/api/core/v1" metav1"k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/discovery" "k8s.io/client-go/kuber......
  • 鸿蒙Harmony OS Next原生开发TS基本数据类型
    鸿蒙初开,开天辟地TS语法之变量书接上文,在TS中,我们常用的数据类型有1.number表示数字,包括浮点数和整数在内leta:number=100;letb:number=-33;letc:number=2.5;console.log(a)console.log(b)console.log(c)console.log(typeofc)leta:number=100;letb:number......
  • windows安装MySQL8.4.3LTS
    windows安装MySQL8.4.3LTS第一步:下载压缩文件https://dev.mysql.com/downloads/mysql/第二步:解压压缩包以及编写配置my.ini配置[mysqld]#skip_grant_tables#设置3306端口port=3306#设置mysql的安装目录basedir=D:\\Software\\mysql-8.4.3-winx64#设置mysql数据库......
  • VBA技术资料MF219:创建一个新的类型模块
    我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解,从简单的入门、到入门后的提高、到数据库、到字典、到WordVBA的应用、到高级......
  • Nuxt.js 应用中的 imports:sources 事件钩子详解
    title:Nuxt.js应用中的imports:sources事件钩子详解date:2024/10/27updated:2024/10/27author:cmdragonexcerpt:imports:sources是Nuxt.js的一个生命周期钩子,用于在模块设置过程中执行。开发者可以利用这个钩子来扩展模块的源,方便地管理依赖和模块化配置。categ......
  • Nuxt.js 应用中的 imports:sources 事件钩子详解
    title:Nuxt.js应用中的imports:sources事件钩子详解date:2024/10/27updated:2024/10/27author:cmdragonexcerpt:imports:sources是Nuxt.js的一个生命周期钩子,用于在模块设置过程中执行。开发者可以利用这个钩子来扩展模块的源,方便地管理依赖和模块化配置。......
  • Deep Robust Multi-Robot Re-localisation in Natural Environments
    IROS2023|CSIRO与昆士兰科技大学发布自然环境中的深度鲁棒多机器人重定位【DeepRobustMulti-RobotRe-localisationinNaturalEnvironments】文章链接:[2307.13950]DeepRobustMulti-RobotRe-localisati... 自然环境中的深度鲁棒多机器人重定位DeepRobustMulti-Rob......