typeScript

typeScript

typescript是微软发布的,严格型的javascript语言编码方式

数据类型

在TS中,编辑函数变量不在是弱类型型语言形式,必须声明变量的数据类型,无论是形参实参还是函数返回参数

function 函数名():返回值类型{
	...
	return 返回值;
	//实际的返回值的类型必须与声明的返回值的类型保持一致
}

如果函数有参数:

function 函数名(形参1:数据类型,形参2:数据类型,...){
	...
}

如果函数既有形参又有返回值:

function 函数名(形参1:数据类型,形参2:数据类型...):数据类型{
	...
	return 返回值;
}

可选参数:

  • 表示参数可以没有,将来如果没有传入这个参数,默认为undefined
function 函数名(形参1:数据类型,形参2 ?:数据类型){
	......
}
  • 默认值:表示如果函数未传递该参数,就使用默认值
function 函数名(形参1:数据类型,形参2:数据类型=默认值){
	......
}
  • 实参的个数不确定,使用收集符操作
function 函数名(形参1:数据类型,形参2:数据类型,...数据名:数据类型[]){
	......
}

重载

重载:指的是保持函数名相同,但是参数列表不同,然后函数根据传入的参数的不用执行不同的逻辑
重写:重写指的是父类的同名方法在子类中重新实现称为重写

TS中要实现重载:

  • 声明多个同名函数只要形参列表不同即可,但是不要实现函数体。
  • 定义一个可实际执行多种任务的函数来支持上面的种重载的情况

function 函数名():void
function 函数名(形参:数据类型):void
强调:只是声明不包含定义

void表示的是这个函数没有返回值,如果函数有返回值,就将void改为返回值的数据类型

 function 函数名(形参?:数据类型){
 	if(形参==undefined){
 		//没有传递任何实参
 		//执行该操作
 	}else{
 		//说明用户调用第二个版本,执行另一项操作
 	}
}

示例:

function reverse(x: number): number;
function reverse(x: string): string;
function reverse(x: number | string): number | string {
    if (typeof x === 'number') {
        return Number(x.toString().split('').reverse().join(''));
    } else if (typeof x === 'string') {
        return x.split('').reverse().join('');
    }
}

class类

class类是ES6中定义的方式在这里也可以使用,但是还是那个说法,对数据类型必须指定;

  • 定义:
class 类名{
	//属性
	属性名1:数据类型=初始值;
	属性名2:数据类型=初始值;
	//构造函数
	constructor(形参1:数据类型,形参2:数据类型){
		this.属性名1=形参1;
		this.属性名2=形参2;
	}
	方法名():数据类型{
		...
	}
}

类型的继承

使用方式:

class 子类名 extends 父类名{
	子类型属性名:数据类型=初始值;
	constructor(形参1:数据类型,形参2:数据类型,形参3:数据类型){
		super(形参1,形参2)this.子类型属性名=形参3;
	}
	方法名:数据类型(){
		方法体
	}
}

访问修饰符

参照Java理解:

  • public 共有的,公共的,所有人可用
  • private 私有的,只有自己可用
  • protected 表示受保护的,只有自己以及自己的后代可用
    示例:
class Father{
	protected moneyProtected:string=“爸爸和儿子偷偷吃零食的钱";
	fatherPay():void{
		/*class自己的方法,可访问自己的任何属性*/
		console.log(`爸爸花${this.moneyProtected}给自己买了包烟`);
	}
}
class Son extends Father{
	sonPay():void{
		//孩子的方法可访问爸爸的public和protected的属性,无法访问爸爸private的属性
		console.log(`儿子花${this.moneyProtected}给自己买了块巧克力`);
	}
}

// 私有的
class Father{
	private moneyProtected:string=“爸爸和儿子偷偷吃零食的钱";
	fatherPay():void{
		/*class自己的方法,可访问自己的任何属性*/
		console.log(`爸爸花${this.moneyProtected}给自己买了包烟`);
	}
}

接口

参考Java理解

  • 定义方式:interface I接口名
interface  I接口名{
   ——合同规定的属性名: 类型;
   规定的方法名(参数:数据类型):返回值;
}
  • 实现接口:implements
class 类型名 implements  I接口名{
	// 必须包含接口中规定的属性和方法
}
//领导要求
//将来的敌机类型Plane中必须包含三个属性和两个方法
interface IPlane{
  x:number
  y:number
  score:number
  fly():void;
  getScore():void;
}
//下属必须按领导要求实现class
class Plane implements IPlane{
  x: number=0;
  y: number=0;
  score: number=0;
  constructor(x:number,y:number,score:number){
    this.x=x;
    this.y=y;
    this.score=score;
  }
  fly(): void {
    console.log(`飞到${this.x}, ${this.y}位置`)
  }
  getScore(): void {
    console.log(`击落敌机,得${this.score}`);
  }
  toString(){
    return `{x:${this.x},y:${this.y},score:${this.score}}`;
  }
}
var p=new Plane(20,100,5);
console.log(p.toString());
p.fly();
p.getScore();

模块化开发

旧js中,所有js文件,都要集中引入到.html文件中,才能运行
优点:想用啥用啥,不需要经过第三方

使用方式:

只导出一个类型/接口:默认导出
– 先创建类型/接口
– 再: export default类型名/接口名
– 引入: import 类型名from “相对路径”
导出多个类型/接口:
– 先创建多个类型/接口
– 再: export {类型名, … }
– 引入: import {类型名, … }from “相对路径

//引入Student class
import Student from "./2_class"

import { Son } from "./3_public"

var hmm=new Student("Han Meimei",12);
console.log(hmm);
hmm.intr();

var s=new Son();
s.pay();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值