我尝试将现有的 Angular 应用程序迁移到 typescript (版本 1.5.3):
代码如下:
'use strict';
angular.module('x')
.directive('tabsPane', TabsPane)
function TabsPane(itemTabs) {
return {
restrict: 'E',
compile: compileTabs
};
function compileTabs(tElement) {
var template = createTabsTemplate(); //function which i don't include here for brevity
tElement.append(template);
}}
当我编译我得到的 javascript 时:
error TS2345: Argument of type '(itemTabs: any) => { restrict: string; compile: (tElement: any) => void; }' is not assignable to parameter of type 'any[]'. Property 'push' is missing in type '(itemTabs: any) => { restrict: string; compile: (tElement: any) => void; }'.
我试图理解为什么它在这里提示我去了 Angular 的 typescript 定义:
typescript 以某种方式暗示了这个定义
directive(name: string, inlineAnnotatedFunction: any[]): IModule;
以下定义更合适:
directive(name: string, directiveFactory: IDirectiveFactory): IModule;
我对 typescript 完全陌生,所以我认为我做错了什么,但我找不到与谷歌相关的任何东西。
最佳答案
我在从旧的 javascript angularJs 1.4.9 代码迁移到 typescript 2.6 代码时遇到了同样的问题。我正在使用@types/angular ver 1.6.39。我添加了“any”作为参数函数的返回类型,例如:
angular.module("app")
.directive("tabsPane", function TabsPane(itemTabs): any {
return {
restrict: 'E',
compile: compileTabs
};
function compileTabs(tElement) {
var template = createTabsTemplate();
tElement.append(template);
}
});
错误消失了:)
关于angularjs - 为什么我会在指令定义中收到错误 TS2345?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32230969/