版本
- 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/