【问题标题】:Is there a way to declare a getter in an interface?有没有办法在接口中声明一个getter?
【发布时间】:2015-11-05 10:28:23
【问题描述】:

我有一个类如下(仅展示部分):

export class LinkedListNode<t> extends windward.WrObject implements ILinkedListNode<t>{
   public get next():LinkedListNode<t> {
        return this._next === this._list._first ? null : this._next;
    }
}

所以在接口中我想将 next 声明为一个方法。但是,以下方法不起作用:

export interface ILinkedListNode<t> {
       get next() : LinkedListNode<t>;
}

以下确实有效,但不准确:

export interface ILinkedListNode<t> {
       next : LinkedListNode<t>;
}

有没有办法在接口中声明一个getter? getter 与成员变量不同,例如,在发布对象时它不会传递给 web worker。

谢谢 - 戴夫

【问题讨论】:

    标签: typescript typescript1.5


    【解决方案1】:

    不,虽然这在 C# 等其他语言中是可能的,但目前在 TypeScript 中是不可能的。

    如果您想要这种行为,最好将其设为方法:

    export interface ILinkedListNode<t> {
        getNext(): LinkedListNode<t>;
    }
    

    【讨论】:

    • 问题是不一样的。我们将对象传递给来自网络工作者的对象,并且传递了一个成员变量,但没有传递一个 getter。我们使用接口来定义我们在这些消息中收到的内容,并在这种情况下将其添加为成员是不准确的。
    • @DavidThielen 听起来您可以在不希望 getter 可用的地方完全不使用它。
    • @SteveFenton 问题是我们真的很想在一些地方使用接口来设置链表。但要做到这一点,它需要列出的所有公共方法。然而,这妨碍了正确处理传入/传出 web worker 的对象。这是一个有点不寻常的用例,但要让这一切正常工作,我们需要明确地将它作为接口中的 getter。哦,好吧...
    【解决方案2】:

    在写作的那一刻,没有办法完成你想要的。

    自 2014 年 7 月以来有一个 open issue on TypeScript's Github,该功能将在他们实施后立即可用。

    ~模拟~你需要的唯一方法是按照 David Sherret 在他的回答中所说的:创建一个 getter 方法。

    export interface ILinkedListNode<t> {
      getNext(): LinkedListNode<t>;
    }
    

    不过,我建议现在只在界面中创建属性,并在将来可用时将其更改为 ~readonly~ 或 ~get~ 版本。

    【讨论】:

      猜你喜欢
      • 2011-02-14
      • 2010-12-22
      • 2012-12-13
      • 2018-04-04
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多