类
类的一些基本示例:
1 | class Greteer{ |
继承
1 | class Animals { |
类public
、private
、protected
1 | //默认为public |
1 | //private |
理解private
1 | // private属性只能在类Animal中使用。 |
理解protected
1 | // 和private基本差不多,只不过私有成员不能在子类中访问,但是protected成员可以在子类中访问。 |
readonly
用来设置一些只读属性
1 | class Person0{ |
存取器
set
和get
1 | // |
我们编译的时候将目标设置为ES5
,采用下面这个命令:
1 | tsc index.ts --target es5 |
类的静态成员
1 | // 其实就是编译后把static成员直接赋值给了Grid。 |
抽象类
抽象类作为其他派生类的基类使用,他们是不能被实例化的。
1 | abstract class Animal { |
类的高级技巧
函数
基本示例
demo
1 | // |
添加参数类型
1 | unction add (x:number,y:number):number{ |
this
1 | let deck = { |
解决上面的suits
为any
的问题
1 | interface Deck { |
this
在回调函数里面
1 | // ts里面的this参数作为"伪"参数在函数参数列表的第一项 |
arrow
函数在ts
中依然可以解决this
的坑
1 | class Handler { |
重载
ts
中的方法重载
1 | let suits = ["hearts", "spades", "clubs", "diamonds"]; |
泛型
基本示例
1 | // 返回任何传入的值,T同时用来捕获用户的传入类型 |
1 | // 返回任何传入它的值,T同来捕获用户的传入类型 |
推荐的第二种写法
1 | function loginingIndetity<T>(arg:T[]):T[]{ |
声明泛型变量的两种方式
1 | // 这表示myIdentity和myIdentity2都是一个接受类型为T的arg参数,并且返回值类型为T的函数 |
泛型和接口
1 | interface G<T> { |
这样的好处在于我们不用在接口里面去描述一个泛型函数了。
泛型类
1 | class GenricNumber<T> { |
泛型约束
1 | interface Lengthwise { |
也可以用泛型约束泛型
1 | // |