Typescript核心篇——函数_this指向—重载—泛型
Posted 勇敢*牛牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Typescript核心篇——函数_this指向—重载—泛型相关的知识,希望对你有一定的参考价值。
Typescript核心篇——函数_this指向—重载—泛型
this
当函数使用到this时,需要在参数中指出this,包括this的类型,而且this必须在函数的第一位
this可以不用在接口中声明
interface IObj
a:number;
b:number;
c(a:number):void;
clickHandler(e:MouseEvent):void;
var o:IObj=
a:1,
b:2,
c:function(this:IObj,a:number):void
// console.log(this.a);
document.addEventListener("click",(e:MouseEvent)=>this.clickHandler(e));
,
// 当函数使用到this时,需要在参数中指出this,包括this的类型,而且this必须在函数的第一位
clickHandler:function(this:IObj,e:MouseEvent):void
console.log(this.a+this.b);
console.log(e)
重载
javascript本身是个动态语言。 JavaScript里函数根据传入不同的参数而返回不同类型的数据是很常见的。
function fn(a:string,b:string):void;
function fn(a:number,b:number):void;
function fn(a:any,b:any):any
if(typeof a==="string")
else if(typeof a==="number")
fn(1,2)
fn("a","b")
泛型
这里,我们使用了类型变量,它是一种特殊的变量,只用于表示类型而不是值。
T 是一个类型变量
function fn<T>(a:T):void
我们也可以使用不同的泛型参数名,只要在数量上和使用方式上能对应上就可以。
fn<number>(1);
fn<string>("a");
fn<a:number,b:number>(a:1,b:2);
var arr:Array<number>=[1,2,3,4]
泛型类型;
function fn<T>(arr:Array<T>)
fn<number>([1,2,3,4]);
fn<string>(["a","b","c","d"]);
函数的泛型导论
var fn:<T>(a:T)=>void=function<T>(a:T)
泛型接口= 函数类型
var fn:<T>(a:T)=>void=<T>(a:T):void=>
接口内的泛型
interface IFn
<T>(a:T):void;
var fn:IFn=<T>(a:T):void=>
fn<number>(3);
接口外泛型
interface IFn<T>
(a:T):void;
var fn:IFn<number>=function(a:number):void
var fn:IFn<string>=(a:string):void=>
fn(3)
所有在类中实现的接口属性和方法必须使用public
interface IA<T>
a:T;
所有在类中实现的接口属性和方法必须使用public
class Box implements IA<number>
public a:number=1;
泛型类
泛型类的实现变换的T的实例属性除了必须是public之外,还得初始化在构造函数中或者赋初值。
class Box<T>
public a:T;
constructor(_a:T)
this.a=_a;
var b:Box<number>=new Box(3);
var c:Box<string>=new Box("a");
函数的 泛型约束
将这个T:类型变量做一个范围约束。只能是某几个参数之内的接口
interface IA
a:number;
interface IB extends IA
b:number;
//函数类型变量T继承了IA
function fn<T extends IA>(a:T):void
fn<IB>(a:1,b:2);
fn<IA>(a:3);
泛型类类型
给函数传入不同的类,返回不同的类的对象。
class Box
public a:number=1;
public play():void
给函数的参数传入不同的类的类型
new出的对象new ():T返回值类型就是T
function fn<T>(className:new ():T):T
var a:T=new className();
return a;
fn<Box>(Box);
以上是关于Typescript核心篇——函数_this指向—重载—泛型的主要内容,如果未能解决你的问题,请参考以下文章
TypeScript核心篇——类(class)-可选参数-存取器-构造函数-静态属性方法-抽象类
进阶路上有你我-相互相持篇之ES6里箭头函数里的this指向问题
typescript继承 __extends = (this && this.__extends) || (function () { 代码解读