【问题标题】:Typescript generics array with inheritance具有继承的打字稿泛型数组
【发布时间】:2021-07-26 16:49:12
【问题描述】:

我试图在打字稿中创建一个数组以包含接受不同类型但它们都继承自基类的不同函数。 像这样:

interface A {
    name: string;
}

interface B extends A{
    bb: string;
}

interface C extends A{
    cc: string;
}

const funcs = [
    (param: B) => {

    },
    (param: C) => {

    },
]

然后像这样使用它

funcs[0]({name: "ASda", bb: "b_value"}) // error 'cc' is missing in type '{ name: string; bb: string; }'
funcs[1]({name: "ASda", cc: "c_value"}) // error 'bb' is missing in type '{ name: string; cc: string; }'

TS playground

【问题讨论】:

    标签: typescript generics typescript-generics


    【解决方案1】:

    您没有为函数数组funcs 指定任何类型。使用动态类型,您的数组签名定义如下:const funcs: (((param: B) => void) | ((param: C) => void))[]

    在这种情况下,编译器不知道您实际使用的函数的签名。根据上述签名,您必须提供涵盖所有可能情况的数据:输入B C 导致您看到的错误。

    您可以通过像这样定义函数数组的类型来使其工作

    const funcs: Function[] = [
        (param: B) => {
    
        },
        (param: C) => {
    
        },
    ]
    
    funcs[0]({name: "ASda", bb: "b_value"}) //No error
    funcs[1]({name: "ASda", cc: "c_value"}) //No error
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-17
      • 2021-12-22
      • 2019-05-22
      • 2017-12-04
      • 2017-12-14
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      相关资源
      最近更新 更多