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

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.

posted @   Zhentiw  阅读(251)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2017-02-12 [NativeScript] Create new application and run emulator
2017-02-12 [NPM] Create a node script to replace a complex npm script
2017-02-12 [NPM] Create a bash script to replace a complex npm script
2017-02-12 [NPM] Pull out npm scripts into another file with p-s
2016-02-12 [Redux] Extracting Action Creators
2016-02-12 [Redux] Generating Containers with connect() from React Redux (FooterLink)
2016-02-12 [Redux] Generating Containers with connect() from React Redux (AddTodo)
点击右上角即可分享
微信分享提示