TS 是什么
TS是一个应用程序级的JavaScript开发语言,是JavaScript的超集,可以编译成纯JavaScript,并遵循JavaScript的语法和语义。
▼ TS与JS相比,有什么优势
TS 与 JS 对比,最主要是增加了静态类型,这样就能在调试的时候做到类型检查,越界检查,在构建的时候就可以发现问题,可以减少潜在的BUG
提供了类、模块和接口,更有利于构建组件
对比TS,其实ES6也已经对JS做了一些类、模块之类的改进,那么为什么还要学习TS呢?其实由TS的名字就可以感受到,它的重点:Type
,JS本身与大部分其他语言的不同之处就在于弱类型,声明一个变量,它就可以是任何类型,这就给代码的管理上造成了隐患。强类型的本意就在于用规则约束自己的代码,有了这些规则,自然而然的就能够避免一些低级的BUG。当然,BUG是永远不可能消失滴。
TS能够更好的帮助管理大型工程,也可以减少代码中一堆isxxx的类型判断。并且TS提供了定义对象类型的接口(Interfaces),对于开发,我们只需要在接口处标明类型,其它的内部过程交由 ts 推理就好,这也减少了许多额外的工作。
TS 中的类型 基础类型 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 let isDone: boolean = false let num: number = 100 let str: string = 'Hello' function alertName ( ): void { alert('My name is Tom' ) } let u: undefined = undefined let n: null = null let anyThing: any = 'hello' console .log(anyThing.myName)console .log(anyThing.myName.firstName)anyThing.setName('Jerry' ) anyThing.setName('Jerry' ).sayHello() anyThing.myName.setFirstName('Cat' )
联合类型 1 2 3 4 5 let myFavoriteNumber: string | number myFavoriteNumber = 'seven' myFavoriteNumber = 7
数组与函数 1 2 3 4 5 6 7 8 let fibonacci: number [] = [1 , 1 , 2 , 3 , 5 ]function sum (x: number , y: number ): number { return x + y } sum(1 , 2 )
TS 中的接口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 interface Person = { name: string , age: number } let tom: Person = { name: 'Tom' , age: 25 } interface Person { readonly id: number name: string age?: number [propName: string ]: any } let tom: Person = { id: 89757 , name: 'Tom' , gender: 'male' } interface Eg { [index: number ]: number , (x: number , y: number ): number }
TS 中的类 ES6 的类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 class Human{ constructor (name ) { this .name = name } sayHi () { return `My name is ${this .name} ` } get name () { return 'Jack' } set name (value) { console .log('setter:' + value) } static isHuman (a) { return a instanceof Human } } let a = new Human('Tom' )a.sayHi() Human.isHuman(a) class Chinese extend Human { constructor (name ) { super (name) } sayHi() { return 'China,' + super .sayHi() } }
ES7 的类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Human{ name: 'Tom' constructor ( ) { } } class Human{ static name = 'Tom' constructor ( ) { } } Human.name
TS 的类
支持ES6、ES7的类定义
增加三种修饰符public
、private
、protected
,对,和当年学 C++ 一模一样
支持抽象类(过于抽象,还不知道如何使用)
支持定义类型(和接口类似)
1 2 3 4 5 6 7 8 9 class Human{ public name: string public constructor (name: string ) { this .name = name } private sayHi (): string { return `My name is ${this .name} ` } }