角度 ui 路由器 1.0.3 与角度.js 1.6.4 似乎使用了错误的承诺类型?



>版本

  • 角度 1.6.4
  • 打字稿 2.3.2
  • UI路由器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/打字稿)迁移到 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);
});
})

最后引用该行时出现以下错误:

错误 TS2339:类型"承诺"上不存在属性"final"。

我的确切代码如下所示:

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界面(mozilla文档),它不包括最后。

但是,根据期望(和上面的指南),我假设他们实际上使用ng.IPromise(angular.js的承诺实现,详细信息可在$q服务中找到)。

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

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

是这种情况还是其他原因导致我的问题?

我有几乎相同的信息,

"属性'最终'在类型'承诺<布尔值>"上不存在。

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

相关内容

最新更新