【问题标题】:TypeScript: index signature is missing with ArrayLike interfaceTypeScript:ArrayLike 接口缺少索引签名
【发布时间】:2023-03-23 08:12:01
【问题描述】:

我尝试使用 TypeScript 内置接口ArrayLike,但仍然收到如下错误消息:

错误:(12, 11) TS2420:“Point”类错误地实现了“ArrayLike”接口。 “Point”类型中缺少索引签名。

interface ArrayLike<T> {
    length: number;
    [n: number]: T;
}

class Point implements ArrayLike<number> {
    [0]: number = 10;
    length: number = 1;
}

我该如何解决这个问题? (或任何解决方法?)

【问题讨论】:

    标签: typescript


    【解决方案1】:

    如何实现接口ArrayLike

    class Point implements ArrayLike<number> {
        [n: number]: number;
        length: number = 1;
        [0]: number = 10;
    }
    
    let p = new Point()
    p[23] = 34; // ok
    p[23] = "34"; // Error: Type 'string' is not assignable to type 'number'
    

    【讨论】:

    • 我是否更正了您的答案[n: number]: number; 不是必需的?所以正确的实现是class Point implements ArrayLike&lt;number&gt; { length: number = 1; [0]: number = 10; }
    【解决方案2】:

    如果您希望您的 Point 成为一个数组,那么为什么不直接扩展 Array 类呢?

    class Point extends Array<number> {
        // add Point array methods here
    }
    

    这样Point会自动实现ArrayLike&lt;number&gt;接口。

    【讨论】:

    • @Paleo 很有趣,虽然我仍然没有遇到扩展Array 类的任何问题。另外,为什么要直接设置数组的长度?这没什么意义。
    • 真诚的,我不知道为什么要使用接口ArrayLike&lt;T&gt;。我刚刚回答了这个问题。 :s
    • @Paleo 由于类的责任,我不想继承Array中的所有方法。
    猜你喜欢
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 2016-10-11
    • 2022-12-11
    • 2016-10-31
    • 2020-06-27
    相关资源
    最近更新 更多