学习typeScript 列表

TypeScript

TypeScript 是一种由微软开发的自由和开源的编程语言
它是 JavaScript 的一个超集,TypeScript 在 JavaScript 的基础上添加了可选的静态类型和基于类的面向对象编程。

开发环境的安装

1 安装Node.js
2 安装TypeScript

npm install typescript -g
tsc --version

3 使用TypeScript
3.1 生成 package.json

tsc --init //生成配置文件,tsconfig.json

vscode下实现typescript自动编译 ===》》vscode–>终端–>运行任务–>tsc监视

3.2 编写代码

let myname:string='wang';
console.log(myname);

3.3 编译和生成

tsc 1.ts
node 1.js

数据类型

  • Undefined
  • Null 空
  • string 字符串
  • Number 数值
  • Boolean 布尔
  • enum 枚举
  • any 任意
  • void 空
  • Array 数组
  • Tuple 元祖

布尔类型(boolean)

let married: boolean=false;

数字类型(number)

let age: number=10;

字符串类型(string)

let firstname: string='wang';

数组类型(array)

let arr2: number[]=[4,5,6];
let arr3: Array<number>=[7,8,9];

元组类型(tuple)
是数组类型中的一种

let fullname: [string,string]=['zhang','san'];

枚举类型(enum)

  • 事先考虑某一个变量的所有的可能的值,尽量用自然语言中的单词表示它的每一个值
  • 比如性别、月份、星期、颜色、单位、学历
 enum Gender{ GIRL, BOY } 
 console.log(李雷是${Gender.BOY}); console.log(韩梅梅是${Gender.GIRL});
enum Week{ MONDAY=1, TUESDAY=2 } 
console.log(今天是星期${Week.MONDAY});

任意类型(any)

let root:any=document.getElementById('root');
root.style.color='red';

null 和 undefined
null 和 undefined 是其它类型的子类型,可以赋值给其它类型,如数字类型,此时,赋值后的类型会变成 null 或 undefined

let x: number;
x = 1; // 运行正确
x = undefined;    // 运行错误
x = null;    // 运行错误

let y: number | null | undefined;
y = 1; // 运行正确
y = undefined;    // 运行正确
y = null;    // 运行正确

void 类型
void表示没有任何类型,一般用于定义方法的时候方法没有返回值

function greeting(name:string):void {
    console.log('hello',name);
}
greeting('wang');

never类型
never是其它类型(null undefined)的子类型,代表不会出现的值
(一般一个方法可能抛异常才用never)

let x: never;
x = (()=>{ throw new Error('exception')})();
function divide(a:number,b:number):never|number{
return a/b
}
divide(10,2)
divide(10,0)

函数

函数的定义
function hello(name:string):void {
    console.log('hello',name);
}
hello('wang');
没有返回值
let hello2 = function (name:string):void {
    console.log('hello2',name);
}
hello('wang');
hello2('wang');
3 可选参数

在TS中函数的形参和实参必须一样,不一样就要配置可选参数,而且必须是最后一个参数

function print(name:string,age?:number):void {
    console.log(name,age);
}
print('wang');  //   如果age后面没有?的,实参这样会报错
4 默认参数
function ajax(url:string,method:string='GET') {
    console.log(url,method);
}
ajax('/users');
5 剩余参数
function sum(...numbers:number[]) {
    return numbers.reduce((val,item)=>val+=item,0);
}
console.log(sum(1,2,3));
6 函数重载

在Java中的重载,指的是两个或者两个以上的同名函数,参数不一样
的TypeScript中,表现为给同一个函数提供多个函数类型定义

let obj: any={};
function attr(val: string): void;
function attr(val: number): void;
function attr(val:any):void {
  if (typeof val === 'number') {
      obj.age=val;
  } else {
      obj.name=val;
  }
}
attr('wang');
attr(9);
attr(true);
console.log(obj);

类的定义
"use strict";
var Person = /** @class */ (function () {
    function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    Person.prototype.getName = function () {
        return this.name;
    };
    Person.prototype.setName = function (name) {
        this.name = name;
    };
    return Person;
}());
var p = new Person('张三', 10);
console.log(p);
p.setName('李四');
console.log(p);
2 继承
class Person {
    name: string;//定义实例的属性,默认省略public修饰符
    age: number;
    constructor(name:string,age:number) {//构造函数
        this.name=name;
        this.age=age;
    }
    getName():string {
        return this.name;
    }
    setName(name:string): void{
        this.name=name;
    }
}
class Student extends Person{
    no: number;
    constructor(name:string,age:number,no:number) {
        super(name,age);
        this.no=no;
    }
    getNo():number {
        return this.no;
    }
}
let s1=new Student('wang',10,1);
console.log(s1);
3 类里面的修饰符
class Father {
    public name: string;  //类里面 子类 其它任何地方外边都可以访问
    protected age: number; //类里面 子类 都可以访问,其它任何地方不能访问
    private money: number; //类里面可以访问, 子类和其它任何地方都不可以访问
    constructor(name:string,age:number,money:number) {//构造函数
        this.name=name;
        this.age=age;
        this.money=money;
    }
    getName():string {
        return this.name;
    }
    setName(name:string): void{
        this.name=name;
    }
}
class Child extends Father{
    constructor(name:string,age:number,money:number) {
        super(name,age,money);
    }
    desc() {
        console.log(`${this.name} ${this.age} ${this.money}`);
    }
}

let child = new Child('wang',10,1000);
console.log(child.name);
console.log(child.age);
console.log(child.money);
4 静态属性 静态方法

静态属性或方法是指可以不实例化直接访问的

class Father {
    static className='Father';
    static getClassName() {
        return Father.className;
    }
    public name: string;
    constructor(name:string) {//构造函数
        this.name=name;
    }

}
console.log(Father.className);
console.log(Father.getClassName());
5 多态
父类定义方法不实现,每一个子类都有自己不同的实现
class Animal{
  speak() {
      throw new Error('子类必须实现此方法!!!');
  }
}
class Dog extends  Animal{
  speak(){
      console.log('小狗汪汪汪');
  }
}
class Cat extends  Animal{
  speak(){
      console.log('小猫喵喵喵');
  }
}
let dog=new Dog();
let cat=new Cat();
dog.speak();
cat.speak();
6 抽象方法

抽象类和方法不包含具体实现,必须在子类中实现
抽象方法只能出现在抽象类中

abstract class Animal{
    abstract speak():void;
}
class Dog extends  Animal{
    speak(){
        console.log('小狗汪汪汪');
    }
}
class Cat extends  Animal{
    speak(){
        console.log('小猫喵喵喵');
    }
}
let dog=new Dog();
let cat=new Cat();
dog.speak();
cat.speak();

接口

接口是一种规范的定义,定义了行为和动作的规范
接口定义了某些类必须遵守的规范
接口不关心类的内部状态数据,也不关心细节
类似与抽象类,还增加了属性、函数等类型

1 属性类接口

对对象的约束

function getUserInfo(user: {name:string,age:number}) {
    console.log(user.name,user.age);
}
getUserInfo({name:'wang',age:9});
interface userInterface{
    name: string,
    age: number,
    height?:number
}
function getUserInfo(user:userInterface) {
    console.log(user.name,user.age,user.height);
}

getUserInfo({name:'wang',age:9});
2 函数类型接口

对方法传入的参数和返回值进行约束

 interface discount{
  (price:number):number
}
let cost:discount = function (price:number):number {
    return price*.8;
}
console.log(cost(100));
3 可索引接口

对数组对象的约束

interface userInterface{
  [index:number]:string
}
let arr:userInterface=['wang1','wang2'];
console.log(arr);
4 类接口

对类的约束

interface Animal{
  name: string;
  speak(something:string):void
}
class Dog implements Animal{
  name: string;
  constructor(name) {
      this.name=name;
  }
  speak(something:string){
      console.log(something);
  }
}
let dog=new Dog('欢欢');
dog.speak('汪汪汪');
5 接口扩展

接口可以继承接口

interface Animal{
  name: string;
  speak(something:string):void
}
interface EggAnimal extends Animal{
 giveEgg():void
}
class Duck implements EggAnimal{
  name: string;
  constructor(name) {
      this.name=name;
  }
  speak(something:string){
      console.log(something);
  }
  giveEgg() {
      console.log('鸭子下蛋');    
  }
}
let duck=new Duck('欢欢');
duck.giveEgg();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值