【问题标题】:Typescript Class member function not accessible打字稿类成员函数不可访问
【发布时间】:2018-01-30 18:13:06
【问题描述】:

我是打字稿的新手,在处理我在课堂上创建的问题时

export class ModuleInfoContainer extends Array<ModuleInfo>  {
  constructor() {
    super();
  }
  search(id: number) {
    let k: ModuleInfo;
    this.every(a => {
        k = a.search(id);
        return !k;
    });
    return k;
  }
}

我希望它可以工作,但是在调试时,所有数组函数都可以访问,但 ModuleInfoContainer 的成员函数 search 无法访问。 但是经过几次谷歌搜索后,我得到了一个示例,并最终得到了此代码

export class ModuleInfoContainer extends Array<ModuleInfo>  {
  constructor() {
    super();
  }
search = function (id: number) {
    let k: ModuleInfo;
    this.every(a => {
        k = a.search(id);
        return !k;
    });
    return k;
  };
}

它按预期工作。

第一个代码有什么问题?

编辑:ModuleInfo

export class ModuleInfo {
  Id: number;
  Name: string;
  DisplayName: string;
  ChildModules: ModuleInfoContainer;
  DependsOn: ModuleInfo[];
  parent: ModuleInfo;
  search(id: number): ModuleInfo {
    if (this.Id === id) {
        return this;
    } else if (this.ChildModules && this.ChildModules.length) {
        return this.ChildModules.search(id);
    }
    return undefined;
  }
}

这就是我试图将其称为我的搜索功能的方式:

let k = new ModuleInfoContainer();
k.search(1);

typescript 编译成功,但运行时出错,提示 k does not have a member function named search(错误可能与 chrome 给出的不完全相同,但含义相同)。 但是第二个代码工作正常。

【问题讨论】:

  • 你是如何使用它的?我刚刚做了一个操场示例,效果很好。
  • 我正在使用 Angular 4 的代码,在 chrome 中第一个只是说没有找到函数搜索。当我尝试调用 let k = new ModuleInfoContainer(); k.search(1); 之类的东西时,我还没有在任何其他浏览器上进行调试。
  • 可以分享一下 ModuleInfo 类吗?
  • 我用 ModuleInfo 类更新了问题

标签: typescript


【解决方案1】:

经过一番搜索,我找到了这些链接

  1. https://github.com/Microsoft/TypeScript/issues/13720
  2. https://github.com/Microsoft/TypeScript/wiki/FAQ#why-doesnt-extending-built-ins-like-error-array-and-map-work

因此,在针对 ES5 或更低版本时,这是一个已知的打字稿问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 2018-09-21
    • 2014-04-26
    • 2021-11-10
    • 1970-01-01
    • 2012-09-11
    相关资源
    最近更新 更多