码迷,mamicode.com
首页 > 其他好文 > 详细

[TypeScript] Generic Functions, class, Type Inference and Generics

时间:2018-02-12 11:13:14      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:eric   ant   tor   fun   int   types   format   generics   let   

Generic Fucntion:

For example we have a set of data and an function:

interface HasName {
    name: string;
}

const heros: HasName[] = [
    {name: Jno},
    {name: Miw},
    {name: Ggr},
    {name: Gew},
    {name: Wfe}
];

function cloneArray(ary: any[]): any[] {
    return ary.slice(0);
}

const clones = cloneArray(heros);

When we check the ‘clones‘ type, you can see it is ‘any[]‘.

 

To add more type information we can change the function:

function cloneArray<T>(ary: T[]): T[] {
    return ary.slice(0);
}

Now we get ‘clones‘ type as ‘HasName[]‘.

 

Generic Class:

class SuperCharacter {
    constructor(public name: string) {

    }
}

class Hero extends SuperCharacter {

}

class SuperTeam {
    constructor(public members: SuperCharacter[],
        public leader: SuperCharacter
    ) {

    }
}

const captainAmerica = new Hero(Captain America);
const thor = new Hero(Thor);
const ironMan = new Hero(IronMan);

const avengers = new SuperTeam(
    [captainAmerica, thor, ironMan],
    captainAmerica
);

const members = avengers.members;

If we check ‘avengers‘ type is ‘SuperTeam‘. ‘memebers‘ type is ‘SuperCharacter[]‘.

 

To add more information to the types we can do:

class SuperTeam<T> {
    constructor(public members: T[],
        public leader: T
    ) {

    }
}

Now the ‘avengers‘ type is ‘SuperTeam<Hero>‘ and ‘members‘ type is ‘Hero[]‘.

 

Now, let‘s say we have another class:

class Villain extends SuperCharacter {

}

Have some members.

const luthor = new Villain(Luthor);
const bizarro = new Villain(Bizarro);
const captainCold = new Villain(Captain Cold);

const megaCrossoverTeam = new SuperTeam([
    captainAmerica, thor, ironMan, luthor,
    bizarro, captainCold
], captainAmerica);

‘megaCrossoverTeam‘ is type of ‘SuperTeam<Hero | Villain>‘.

 

If we want to add some restrictions to the class, we can do:

class SuperTeam<T extends SuperCharacter> {
    constructor(public members: T[],
        public leader: T
    ) {

    }
}

Then the example below will throw error:

const avengers = new SuperTeam(
    [0, 1, 2],
    0
);

Because the type is number.

[TypeScript] Generic Functions, class, Type Inference and Generics

标签:eric   ant   tor   fun   int   types   format   generics   let   

原文地址:https://www.cnblogs.com/Answer1215/p/8443574.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!