angular ui-router 1.0.3 和 angular.js 1.6.4 似乎使用了错误的 Promise 类型?

Posted

技术标签:

【中文标题】angular ui-router 1.0.3 和 angular.js 1.6.4 似乎使用了错误的 Promise 类型?【英文标题】:angular ui-router 1.0.3 with angular.js 1.6.4 appears to be using the wrong Promise type? 【发布时间】:2017-10-22 12:05:39 【问题描述】:

版本

角1.6.4 打字稿 2.3.2 ui-router 1.0.3 希望不相关(因为我不喜欢处理 webpack 问题),但与 webpack 2.5.1 和 ts-loader 2.0.3 捆绑在一起。

问题

这是一个问题,而不是 ui-router 的 github 上的声明性问题,因为我不太确定根本原因分析或正确修复。我也不确定这是否是我们的打字稿环境中的问题。

我正在关注https://ui-router.github.io/guide/ng1/migrate-to-1_0 将我们现有的应用程序(混合 js/typescript)迁移到 ui-router 1.0.3。具体有以下问题:

// Migrate to: UI-Router 1.0 Transition Hook
app.run(function($transitions) 
  $transitions.onStart( , function(trans) 
    var SpinnerService = trans.injector().get('SpinnerService');
    SpinnerService.transitionStart();
    trans.promise.finally(SpinnerService.transitionEnd);
  );
)

引用 finally 行时出现以下错误:

错误 TS2339:“Promise”类型上不存在属性“finally”。

我的确切代码如下所示:

import router = require("@uirouter/angularjs"); 
// <snip a bunch of boilerplate>

  constructor($scope: angular.IScope, $transitions: router.TransitionService) 
    this.loading = true;
    $transitions.onStart(, (trans: router.Transition) => 
      this.setLoading(true)();
      trans.promise.finally(this.setLoading(false));
    );
  

我们有一个简单的 tsconfig,如下所示:


  "compilerOptions": 
    "allowSyntheticDefaultImports": true,
    "target": "es5",
    "sourceMap": true,
    "module": "commonjs"
  ,
  "exclude": [
    "node_modules"
  ]

当我试图找到根本原因时,我发现ui-router的声明文件将.promise的类型设置为Promise。我的IDE(带有潮汐的emacs)不知道这个Promise来自哪里,但我猜它是es6 Promise接口(@98​​7654322@),它不包括finally。

但是,按照预期(和上面的指南),我假设他们实际上使用了ng.IPromise(angular.js 的承诺实现,详细信息见$q service)。

如果(如果)我的理解是正确的,这意味着这是他们的类型声明中的一个错误,他们应该将他们的承诺类型定义为不同的类/类型。

如果是这样,我会提交一个错误,但我会对制作本地解决方法的正确方法感兴趣,因为我不确定我应该如何去做。

是这种情况还是我的问题的根本原因?

【问题讨论】:

我在 github repo 中报告了一个问题:github.com/angular-ui/ui-router/issues/3500 【参考方案1】:

我收到了几乎相同的信息,

“'Promise' 类型上不存在属性 'final'。”

我追溯到我在代码中看到 Promise 的地方,并记得在某处读过不要使用 Object 而是使用 object 。一旦我将其更改为对象,错误就消失了。

【讨论】:

以上是关于angular ui-router 1.0.3 和 angular.js 1.6.4 似乎使用了错误的 Promise 类型?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2、TypeScript 和 ui-router - 如何获取状态参数

ngRoute (angular-route.js) 和 ui-router (angular-ui-router.js) 模块有什么不同呢?

ngRoute (angular-route.js) 和 ui-router (angular-ui-router.js) 模块有什么不同呢?

带有angular1.5组件meteor和ui-router的动态标题

angular ui-router怎么使用

将 Angular UI-Router 与 Phonegap 一起使用