首页 > 其他分享 >TS类,接口,泛型的简介

TS类,接口,泛型的简介

时间:2024-05-23 22:58:16浏览次数:24  
标签:string 简介 age TS value number 泛型 name

// 1.类的属性和方法
class Dog {
    name: string = "旺财";
    age: number = 2;

    shout() {
        console.log("汪汪汪")
    }
}

let dog = new Dog()

// 2.类的构造函数(用于给类中的属性设定初始值,在创建类的实例时会被触发)
class Cat {
    name: string;
    age: number;

    constructor(name: string, age: number) {
        this.name = name;                   //this指的是此类的实例
        this.age = age;
    }

    shout() {
        console.log("喵喵喵")
    }
}

let cat = new Cat("咪咪", 3)

// 3.类的继承
// 开发时可能存在类之间有许多共用的属性和方法,这个时候就需要一个父类把这些方法提取出来用于子类的继承
class Animal {
    name: string;
    age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    shout() {
        console.log("动物的叫声")
    }
}

class Bird extends Animal {
    skill: string;
    constructor(name: string, age: number, skill: string) {
        super(name, age)                    //super指的是该类的父类,当需要添加新的属性是,需要重写构造函数,这个时候就需要执行super,相当于把父类的构造函数执行一遍
        this.skill = skill
    }

    shout() {
        console.log("啾啾啾")       //重写父类中的shout函数
    }
}

let bird = new Bird("小红", 2, "飞翔");

// 4.抽象类(有时候我们不希望用于继承的父类能创建实例,只能用于继承,这个时候就需要抽象类)
abstract class Food {        //在该类前加上abstract,该类就会变成抽象类,不能创建实例
    name: string;
    colour: string;

    constructor(name: string, colour: string) {
        this.name = name;
        this.colour = colour;
    }
}

// 5.接口(用来定义一个类或者对象的结构)
interface myInterface {
    name: string;
    age: number
}

let obj: myInterface = {
    name: "琳琳",
    age: 15
}

interface myInter {
    name: string;
    sayHello(): void;
}

class myClass implements myInter {
    name: string;

    constructor(name: string) {
        this.name = name
    }

    sayHello() {
        console.log("myInter接口的实现")
    }
}

// 6.属性封装
// 属性修饰符有三种 public,private,protected。不写修饰符的情况下默认为 public
// private 说明该属性为该所在类私有,只有在该类中才能被访问,无论是继承还是创建实例都不能被访问
// protected 修饰符设置的属性只能在当前类和继承当前类的子类中使用
// 属性为私有后外部就不能随便修改该属性,这个时候我们需要设置相应的getter和setter方法来获取和修改属性,这样可以将属性的修改控制在可控范围
class Person {
    // private name:string;
    // private age:number

    constructor(private _name: string, private _age: number) {   //ts语法糖,可以简化属性和构造函数
        // this.name = name
        // this.age = age
    }

    // 类的getter和setter方法

    // getName(){
    //     return this.name
    // }

    // setName(value:string){
    //     this.name = value
    // }

    // getAge(){
    //     return this.age
    // }

    // setAge(value:number){
    //     this.age = value
    // }

    // TS的getter和setter方法有简写

    get name() {
        return this._name
    }

    set name(value: string) {
        this._name = value
    }

    get age() {
        return this._age
    }

    set age(value: number) {
        this._age = value
    }

    sayHello() {
        console.log("你好")
        console.log(`我的名字是${this.name}`)
    }
}

let person = new Person("小明", 15)
// console.log(person.getName())   // 获取person对象的名字
// person.setName("小华")      // 修改对象的名字

console.log(person.name)    // 获取person对象的名字
person.name = "小华"        // 修改对象名称

// 7.泛型(有些情况下我们并不知道所有参数和返回的类型,这个时候就需要泛型)
// 定义函数泛型
function fn<T>(name: T): T {       // 这表示该函数定义了一个泛型为T,name的类型也是泛型T,返回值的类型也为泛型T
    return name
}

fn(10); // 不指定泛型,TS会自动推测出泛型为number

fn<string>("你好世界"); // 指定泛型为string

// 泛型可以指定多个
function fn2<T, K>(name: T, age: K): T {
    return name
}

fn2("小明", 12)
fn2<string, number>("小明", 12)

// 泛型不只是string,number之类的,也可以是接口的实现
interface Inter{
    length:number
}

function fn3<T extends Inter>(a:T):number{
    return a.length
}

fn3([1,23,4])

// 定义类的泛型
class myClass2<T>{
    constructor(private _name:T){}

    get name(){
        return this._name
    }

    set name(value:T){
        this._name = value
    }
}

 

标签:string,简介,age,TS,value,number,泛型,name
From: https://www.cnblogs.com/sisxxw/p/18204837

相关文章

  • Pytorch-01 框架简介
    智能框架概述人工智能框架是一种软件工具,用于帮助开发人员构建和训练人工智能模型。这些框架提供了各种功能,如定义神经网络结构、优化算法、自动求导等,使得开发人员可以更轻松地实现各种人工智能任务。通过使用人工智能框架,开发人员可以更快速地开发和部署机器学习和深度学......
  • 不闭合三维TSP:成长优化算法GO求解不闭合三维TSP(起点固定,终点不定,可以更改数据集),MATLAB
    一、旅行商问题旅行商问题(Travelingsalesmanproblem,TSP)是一个经典的组合优化问题,它可以描述为一个商品推销员去若干城市推销商品,要求遍历所有城市后回到出发地,目的是选择一个最短的路线。当城市数目较少时,可以使用穷举法求解。而随着城市数增多,求解空间比较复杂,无法使......
  • 不闭合三维TSP:蛇优化算法SO求解不闭合三维TSP(起点固定,终点不定,可以更改数据集),MATLAB代
    一、旅行商问题旅行商问题(Travelingsalesmanproblem,TSP)是一个经典的组合优化问题,它可以描述为一个商品推销员去若干城市推销商品,要求遍历所有城市后回到出发地,目的是选择一个最短的路线。当城市数目较少时,可以使用穷举法求解。而随着城市数增多,求解空间比较复杂,无法使......
  • Flutter笔记:Widgets Easier组件库-使用隐私守卫
    Flutter笔记WidgetsEasier组件库:使用隐私守卫-文章信息-Author:李俊才(jcLee95)VisitmeatCSDN:https://jclee95.blog.csdn.netMyWebSite:http://thispage.tech/Email:[email protected]:https://blog.csdn.net......
  • HTSM的质量标准维度
    功能性(Capability):系统功能是否正确,是否满足了用户需求?可靠性(Reliability):在任何情况下是否都可以正常工作?健壮性(容错性):系统在出现故障时,是否能够自动恢复或者忽略故障继续运行。错误处理:产品在出现坏数据的情况下能够抵抗失败,在失败时能保持优雅,并易于恢复。(在失败时,也能够给出准确......
  • PhiData 一款开发AI搜索、agents智能体和工作流应用的AI框架
    引言在人工智能领域,构建一个能够理解并响应用户需求的智能助手是一项挑战性的任务。PhiData作为一个开源框架,为开发者提供了构建具有长期记忆、丰富知识和强大工具的AI助手的可能性。本文将介绍PhiData的核心优势、应用示例以及如何使用PhiData来构建自己的AI助手。PhiData的设......
  • ts_01_数据类型
    /***typeScript学习1数据类型*number数字类型*string字符串类型*boolean布尔类型*Array数组*Tuple元组*enum枚举*Any任意类型*void无任何类型*null空类型*undefined未定义类型*......
  • 京东商家智能助手:Multi-Agents 在电商垂域的探索与创新
    电商助手是一款集合了多种电商经营决策功能的工具软件,旨在帮助电商从业者完成从商品发布到订单管理、客服沟通、数据分析等一系列电商运营任务。京东零售基于Multi-Agents理念搭建了商家助手大模型在线推理服务架构,这一系统的核心是算法层基于ReAct范式定制多个LLMAIAgent......
  • Archery 平台执行DDL error:Threads_connected exceeds its critical threshold
    在数据库管理平台Archery上定时任务执行DDL操作,第二天发现报错,报错信息如下:Errorcopyingrowsfrom`DB`.`TABLE_NAME`to`DB`.`_TABLE_NAME_new`:Threads_connected=1358exceedsitscriticalthreshold1300登录查看Threads_connected信息,Threads_connected一直处于大......
  • 搜索引擎ElasticSearch18_ElasticSearch简介1
    一、ElasticSearch简介1、什么是ElasticSearchElaticsearch,简称为es,es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但......