tses6gitwebpack面试

TS 泛型

2018-10-23  本文已影响0人  郑无穷大

定义

泛型就是用一个东西表示广泛的类型。

function returnIt<T>(sth: T):T {
    return sth;
}
// 前面的<T>是声明泛型!
let returnIt2: <X>(sth: X) => X = returnIt;
// 上面俩种定义方法一样
let a = returnIt({ name: 'zheng',age: 18});
// 泛型,对比any就是保存了数据,一对一
function returnArray<T>(array: T[]): T[] {  //T[] 可以写成Array<T>
    return array;
}
// 数组的泛型,定义数组的类型
interface Human {
    name: string;
    age: number;
}
let b = returnArray<Huamn>([{name:'x',age:1},{name:'xx',age:2}])

let c:Array<string> = ['a','b'];

接口

interface add<T> {
    (a: T,b: T): T;
}

let numberAdd: add<string> = (a2: string, b2: string): string => {
    return a2 + b2;
}

泛型约束

就是给泛型添加一些约束。

function returnIt<T>(arg: T): T{
    console.log(arg.length) // error
    return arg;
}
添加约束之后

interface HasLength{
    length: number
}

function returnIt<T extends HasLength>(arg: T): T{
    console.log(arg.length) // no error
    return arg;
}
// 类的泛型约束
function create<T>(c: {new():T}) {
  return new c();
}
class Human{}

let  jack = create<Human>(Human)
上一篇 下一篇

猜你喜欢

热点阅读