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

标签 angularjs typescript angular-ui-router

版本

  • Angular 1.6.4
  • typescript 2.3.2
  • 用户界面路由器 1.0.3
  • 希望不相关(因为我不喜欢处理 webpack 问题),但与 webpack 2.5.1 和 ts-loader 2.0.3 捆绑在一起。

问题

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

我正在关注 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 行时收到以下错误:

error TS2339: Property 'finally' does not exist on type 'Promise'.

我的确切代码如下:

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 接口(interface)( mozilla doc ),它不包括 finally。

但是,根据预期(和上面的指南),我假设他们实际上使用了 ng.IPromise(angular.js 的 promise 实现,详情请参见 $q service)。

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

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

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

最佳答案

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

"Property 'finally' does not exist on type 'Promise<boolean>'."

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

关于angularjs - 带有 angular.js 1.6.4 的 angular ui-router 1.0.3 似乎使用了错误的 Promise 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44119516/

相关文章:

angularjs - 在 *ngIf 中调用函数

typescript - 理解 typescript 类型断言

angularjs - 导入 C3 和 D3 时出现 Typescript 编译错误

javascript - AngularJS - ng-repeat 和 ng-show

javascript - Ionic 简单应用程序无法在移动设备上运行

typescript - 使用 ConstructorParameters 扩展泛型类?

angularjs - angular-ui-router 嵌套 View 和 "RangeError: Maximum call stack size exceeded"

angularjs - 没有 urlRouterProvider.otherwise 的 ui 路由

Angular 如何将数据传递给嵌套路由组件

angularjs - 在 Angular UI Router 中嵌套路由