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接口(@987654322@),它不包括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) 模块有什么不同呢?