angularjs - 为什么我会在指令定义中收到错误 TS2345?

标签 angularjs typescript typescript1.5

我尝试将现有的 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/

相关文章:

angularjs - [FromBody] 中的字节数组和 JSON

css - ngDialog 深色覆盖覆盖对话框

javascript - 传递和调用函数的正确方法

inheritance - 在 TypeScript 中,一个接口(interface)可以扩展一个类,这是为了什么?

typescript - 如何找到所有用某种装饰装饰的类?

javascript - 编译错误 5 MIN QUICKSTART Angular 2.0

javascript - 从列表中选择多个项目

javascript - 如何使用 Angular 函数导出 Angular HTML 模板

angular - typescript 对象集