【问题标题】:Typescript errors when setting declaration to TRUE将声明设置为 TRUE 时出现打字稿错误
【发布时间】:2016-02-04 05:20:35
【问题描述】:

我正在尝试为我正在处理的 Angular 2 项目创建打字稿定义,以便它可以成为可导出的库。

我有几个服务设置,它们将 http 请求返回到与以下内容非常相似的组件:

public create(user:User) {
  return this.http.post(this._apiUrls.create,
    JSON.stringify(user), {
      headers: this.apiConfig.getApiHeaders()
    });
}

然后我从这样的组件中调用:

Session.create(user).subscribe((res:Response) => {
  this.user = res.json().user
}); 

这一切都很好,直到我在 tsconfig 文件中将“声明”设置为 true,以便我可以创建打字稿定义文件。我的一些服务开始出现以下错误:

error TS4053: Return type of public method from exported class has or is using name 'Observable' from external module "node_modules/rxjs/Observable" but cannot be named.

我基本上了解这个问题,但我不知道解决方案。如果我将 Observable 导入服务,那么 typescript linter 会抛出错误,因为从技术上讲,它没有在该文件中使用。

来自 Angular 1,这与我们在所有应用程序中采用的类似范例来分解我们的代码,但也许我需要更改 Angular 2 中的方法?我查看了许多其他 Angular 2 示例,他们也都以类似的方式完成了它。

【问题讨论】:

    标签: typescript angular angular2-services


    【解决方案1】:

    截至今天,编译器不会在声明文件中自动为您导入类型。

    目前最好的解决方法是手动禁用导入的 lint 规则,或者导入类型并使用显式类型注释,以便 linter 将其标记为用法。

    换句话说

    // Explicit import of 'Observable' so that '.d.ts' files
    // can be generated correctly.
    import { Observable } from "node_modules/rxjs/Observable";
    
    // Explicit use of 'Observable' to satisfy your linter.
    public create(user: User): Observable {
      return this.http.post(this._apiUrls.create,
         JSON.stringify(user), {
           headers: this.apiConfig.getApiHeaders()
        });
    }
    

    【讨论】:

    • 一些例子会很好
    • 我不明白你的解决方案。你能更清楚地解释我该怎么做吗?
    • 作者说如果他们明确地导入Observable(即import { Observable } from "node_modules/rxjs/Observable"),那么这将修复错误。所以这就是解决方案。使该解决方案出现问题的原因是他们的 linter 认为 Observable 未使用。 that 的解决方案是实际使用Observable 作为返回类型(即public create(user: User): Observable)。我已经更新了我的答案以澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 2018-06-05
    相关资源
    最近更新 更多