学习TS的总结

解开疑惑

最近刚刚接触TS,我刚开始不太理解,为啥要用TS,限制很多还要转换,觉得js也有类型转换,强类型和弱类型也没有很大的区别,不懂为啥那么的推崇TS。

之后慢慢的了解思考之后,我明白了些用TS的好处

  • 方便更准确的检查错误。
  • 给程序带来稳定性和可预测性。
  • 静态类型检查。项目中不再需要typeof检查类型,数据类型之前就规定好的。比如react传过来的props就不需要写proptypes。

TypeScript 语法

1. 类型注解

类型注解就是给变量、函数添加类型约束。

function hello(name:string){
    return "hello,"+name;
}
复制代码

这里规定了hello函数要接受一个字符串的参数,若此时传number等就会报错。

数据类型

可限制的数据类型有:Boolean number string number[]/Array

元组

元组允许数组类型可以不一致,如 let x:[number,string]

枚举

枚举类型可以为一组数值赋予友好名字

enum Color {Red=1,Green,Blue}
let colorName:string=color[2]
alert(colorName); //Green
复制代码

任意值 any

当不清楚要指定什么类型时,用any来表示任意值let notSure:any=1

当只知道一部分数据的类型时候,也可以使用any,如数组可以包含不同类型的数据

let list:any[]=[1,true,'hello world'];
list[1]=100;
复制代码

空值 void

如一个函数没有返回值时,则返回值类型为void

function noreturn():void{
    alert('this is not return')
}
复制代码

2. 接口

在下面的例子中,我们用接口来接口来描述拥有first,last字段的对象,这就要求在实现接口的时候要保证包含了接口要求的结构。

interface Person {
    firstName: string;
    lastName: string;
}

function greeter(person: Person) {
    return "Hello, " + person.firstName + " " + person.lastName;
}

let user = { firstName: "li", lastName: "meimei" };

document.body.innerHTML = greeter(user);

复制代码

可选属性

接口里面的属性并非都是必须属性,有些函数只需传入部分参数,如下color属性为可选属性。

interface config{
    color?:string;
    width:number;
}
复制代码

可读属性 readonly

interface config{
    readonly x:number;
    readonly y:number;
}
复制代码

函数类型

使用接口描述函数的类型

interface SearchFun{
    (source:string, subSource:string):boolean;
}
let search:SearchFun;
search=function(source:string,subSource:string){
    let res=source.search(subSource);
    return res>-1;
}
复制代码

类类型实现接口

interface ClockInterface{
    curTime:Date;
    setTime(d:Date);
}
class Clock implements ClockInterface{
    curTime:Date;
    setTime(d: Date) {
        this.currentTime = d;
    }
    constructor(h: number, m: number) { }
}
复制代码

继承接口

接口可以继承一个接口或者多个接口

interface Shape {
    color: string;
}

interface PenStroke {
    penWidth: number;
}

interface Square extends Shape, PenStroke {
    sideLength: number;
}

let square = <Square>{};
square.color = "blue";
square.sideLength = 10;
square.penWidth = 5.0;
复制代码

3. 类

创建一个带有构造函数和一些公共字段的类。

在构造函数的参数上使用public,相当于构建了同名的字段名

class Student {
    fullName: string;
    constructor(public firstName: string, public middleInitial: string, public lastName: string) {
        this.fullName = firstName + " " + middleInitial + " " + lastName;
    }
}

interface Person {
    firstName: string;
    lastName: string;
}

function greeter(person : Person) {
    return "Hello, " + person.firstName + " " + person.lastName;
}

let user = new Student("Jane", "M.", "User");

document.body.innerHTML = greeter(user);
复制代码

类的修饰符

class Car{
    public type:string;
    private name: string;
    protected color:string;
    readonly shape:string;
}
new Car("train").name; // 错误: 'name' 是私有的.
复制代码
  • public:默认
  • private:不能在声明他的类的外部使用
  • protected:和private很相似,但是能在其派生类中使用
  • readonly:只读属性只能在构造函数或者申明时候使用

总结

TS是JS的超集并能编译成JS,也就是说TS最终会要编译成js才使用。

自己在项目中使用TS还很少,先研究一下基础知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值