TypeScript

导读:本篇文章讲解 TypeScript,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

变量类型

:string
:number
:void
:never

函数对象多个参数

function add({ one, two }: { one: number, two: number }): number {
  return one + two;
}
const three = add({ one: 1, two: 2 });

函数对象单个参数

function getNumber({ one }: { one: number }): number {
  return one;
}
const one = getNumber({ one: 1 });

定义不同类型的数组

const arr1: (number | string)[] = [1, 'string', 2]

类型别名

type Lday = { name: string; age: number }
const XiaoGeGe1: Lday[] = [
  { name: '刘英', age: 20 },
  { name: '丛继永', age: 22 }
]

用类定义,类型别名

class Madam {
  name: string
  age: number
}
const xiaogege: Madam[] = [
  { name: '丛继永', age: 12 },
  { name: '前端', age: 20 }
]

元组和数组一样,就是可以限定每个元素的类型
接口和类型别名一样,接口必须是对象
?非必须的值


interface Girl {
  name: string;
  age: number;
  bust: number;
  waistline?: number; //问号可能表示值可以省略不写
}
const getResume = (girl: Girl) => {
  console.log(girl.name + "年龄是:" + girl.age);
  console.log(girl.name + "胸围是:" + girl.bust);
};

**允许加入任意值 ,属性和值 **

interface Girl {
  name: string;
  [propname: string]: any;
}

接口里面也可以放方法

interface Girl {
  name: string;
  [propname: string]: any;
  say(): string;
}

class XiaoJieJie implements Girl {
  name = "刘英";
  age = 18;
  bust = 90;
  say() {
    return "欢迎光临 ,红浪漫洗浴!!";
  }
}

类可以继承重写
public从英文字面的解释就是公共的或者说是公众的,在程序里的意思就是允许在类的内部和外部被调用.

class Person {
//内部
    public name:string;
    public sayHello(){
        console.log(this.name + ' say Hello')
    }
}
//-------以下属于类的外部--------
const person = new Person()
person.name = 'jspang.com'
person.sayHello()
console.log(person.name)

private 访问属性的意思是,只允许再类的内部被调用,外部不允许调用
protected 允许在类内及继承的子类中使用

类的构造函数
构造函数就是在类被初始化的时候,自动执行的一个方法。
普通写法(好理解)

class Person{
    public name :string ;
    constructor(name:string){
        this.name=name
    }

}

const person= new Person('jspang')
console.log(person.name)

开发简单写法

class Person{
    constructor(public name:string){
    }
}
const person= new Person('jspang')
console.log(person.name)

在子类中使用构造函数需要用super()调用父类的构造函数

class Person1{
  constructor(public name:string){}
}

class Teacher extends Person1{
  constructor(public age:number){
      super('jspang')
  }
}

const teacher = new Teacher(18)
console.log(teacher.age)
console.log(teacher.name)

private 封闭一个属性
使用类的Getter和Setter设置和获取
getter属性的关键字是get,后边跟着类似方法的东西,但是你要注意,它并不是方法,归根到底还是属性。

//声明一个XiaoJieJie(小姐姐)类,都知道小姐姐的年龄是不能随便告诉人,所以使用了private,这样别人就都不知道她的真实年龄,而只有她自己知道。如果别人想知道,就必须通过getter属性知道,注意我这里用的是属性,对他就是一个属性
class Xiaojiejie {
  constructor(private _age:number){}
  get age(){
      return this._age
  }
}
const dajiao = new Xiaojiejie(28)
console.log(dajiao.getAge)

在getter里,我们可以对_age进行处理,比如别人问的时候我们就偷摸的减少 10 岁。代码可以写成这样

class Xiaojiejie {
  constructor(private _age:number){}
  get age(){
      return this._age-10
  }
}

age是私有的,那类的外部就没办法改变,所以这时候可以用setter属性进行改变

class Xiaojiejie {
  constructor(private _age:number){}
  get age(){
      return this._age-10
  }
  set age(age:number){
    this._age=age
  }
}

const dajiao = new Xiaojiejie(28)
dajiao.age=25
console.log(dajiao.age)

其实setter也是可以保护私有变量的,现在大脚的年龄输出是 15 岁,这肯定不行,不符合法律哦,这样是我们在setter里给他加上个 3 岁,就可以了。

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

用static声明的属性和方法,不需要进行声明对象,就可以直接使用,代码如下。

class Girl {
  static sayLove() {
    return "I Love you";
  }
}
console.log(Girl.sayLove());

readonly,也就是只读的意思,在实例化对象时赋予的名字,以后不能再更改了


class Person {
    public readonly _name :string;
    constructor(name:string ){
        this._name = name;
    }
}

const person = new Person('jspang')
person._name= '谢广坤' //不可以修改,vscode会报错
console.log(person._name)

抽象类


abstract class Girl {
  abstract skill():void
}

class Waiter extends Girl {
  skill() {
    console.log('大爷,请喝水!')
  }
}
class BaseTeacher extends Girl {
  skill() {
    console.log('大爷,来个泰式按摩吧!')
  }
}
class seniorTeacher extends Girl {
 skill() {
    console.log('大爷,来个SPA全身按摩吧!')
  }
}
var a = new seniorTeacher
a.skill()

联合类型animal(任意值)
联合类型,可以认为一个变量可能有两种或两种以上的类型

interface Waiter {
  anjiao: boolean;
  say: () => {};
}

interface Teacher {
  anjiao: boolean;
  skill: () => {};
}

function judgeWho(animal: Waiter | Teacher) {}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/4856.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!