TypeScript教程(十三)泛型约束与命名空间
日期:2021-05-26
来源:程序思维浏览:3003次
一、泛型约束
泛型约束是指确保泛型类使用的参数是提供特定方法的类型,比如直接对一个泛型参数使用length属性或是用push()方法,会报错,因为这个泛型根本不知道它有这个属性或是这个方法,使用泛型约束可以解决这一的问题。
接下来看一下代码示例:
interface IArrayFunc{
//可以在setArray函数中使用push方法
push:Function;
//可以在setArray函数中使用length属性
length:number;
}
function setArray<T extends IArrayFunc>(data:T,value:string|number){
data.push(value);
console.log(data);//结果为:[1,2,3,'4']
console.log(data.length); //结果为:4
}
setArray([1,2,3],"4");
先创建一个名为IArrayFunc的接口,在该接口内部的push:Function和length:number表示被泛型约束的参数可以使用push()方法和length属性,接下来在声明的setArray()函数中使用<T extends IArrayFunc>来实现泛型约束,这样参数data就可以使用push()方法和length属性了。
二、命名空间
命名空间主要用于组织代码,避免命名冲突,解决重名的问题,在代码量较大的情况下,为了避免各种变量命名相冲突,可将相似功能的函数、类、接口等放置到命名空间内,TypeScript的命名空间使用namespace关键字创建,可以将代码包裹起来,如果需要在外部访问命名空间内的接口或是类,则需要在类和接口添加export关键字。
接下来看一下代码示例:
namespace A{
export let message="大家好";
export class Person{
public name:string="张三";
public say(){
console.log("大家好,我是"+this.name);
}
}
}
console.log(A.message);//结果:大家好
let person=new A.Person();
person.name; //结果:张三
person.say();
使用namespace关键字创建命名空间A,在A内部可以写任意代码,比如声明变量message和创建Person类,如果在外部调用需要使用export关键字将变量和类暴露出来,使用A.message可以获取命名空间内部变量的值,使用new A.Person()可以创建命名空间内部类的实例。
精品好课