【问题标题】:Allow unknown methods on object允许对象上的未知方法
【发布时间】:2020-05-12 15:17:52
【问题描述】:

我有一个对象,它有多个编译时未知的方法名称。但是,方法的签名始终是相同的。我尝试使用这样的索引类型:

interface List<T> extends Array<T> {
    [key: string]: (...arg0: any[]) => List<T>
    [key: string]: () => List<any>
    each(fn: Function): void
    each(...args: any[]): void
    toArray(): T[]
}

但是,typescript 抱怨它无法将其他方法签名放入其中:

类型'{(fn:函数)的属性'每个':void; (...args: any[]): 无效; }' 不能分配给字符串索引类型 '(...arg0: any[]) => List'。

我知道这是一件不寻常的事情,但是你怎么能在 typescript 中做我需要的呢?

【问题讨论】:

    标签: typescript .d.ts


    【解决方案1】:
    interface List<T>{
    [key: string] : ((...arg) => any) | (() => List<any>);
    each: ((fn: Function) => void) | ((...args: any[]) => void);
    toArray : () => T[];
    

    }

    这是你想要的吗?

    【讨论】:

    • 合并所有这些声明有什么原因吗?
    • 是的,你在同一个界面中定义了两次相同的属性,所以合并它,你可以提到多种类型的相同属性
    • 是的,重载在打字稿中很常见。合并声明只会让阅读变得更加困难
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 2010-10-01
    • 1970-01-01
    • 2020-07-30
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多