Typescript中的缩小泛型函数有什么作用?

时间:2020-09-08 10:29:47

标签: javascript typescript generics

假设我们具有以下接口:

interface MyInterface {
    content: string;
}

由以下三个功能使用:

function fn1<T>(arg: T): void {
    let local = arg;
    console.log(local.content);
}

function fn2<T extends MyInterface>(arg: T): void {
    let local = arg;
    console.log(local.content);
}

function fn3(arg: MyInterface): void {
    let local = arg;
    console.log(local.content);
}

(在Playground上)

第一个正确访问local.content时出现错误:“类型'T'不存在属性'content'”。 因此,在fn2中,我决定使用extends MyInterface来缩小泛型类型,以确保存在local.content。但是fn3呢? fn2fn3之间有什么区别? 对我来说,很明显无限制地使用泛型,而我不明白为什么即使对联合类型也应使用缩小的泛型:

function fn4<T extends MyInterface | MyInterface2>(arg: T): void {
    let local = arg;
    console.log(local.content);
}

vs。

function fn5(arg: MyInterface | MyInterface2): void {
    let local = arg;
    console.log(local.content);
}

谢谢。

0 个答案:

没有答案