为什么我在指令定义上得到错误TS2345?

时间:2015-08-26 15:39:13

标签: angularjs typescript typescript1.5

我尝试将现有的角度应用程序迁移到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时,我得到:

  

错误TS2345:类型的参数'(itemTabs:any)=> {restrict:string; compile:(tElement:any)=>无效; }'不能赋值给'any []'类型的参数。     类型'(itemTabs:any)=>中缺少属性'push' {restrict:string; compile:(tElement:any)=>无效; }”。

我试着理解为什么它在这里抱怨我去了angular的打字稿定义:

不知何故,打字稿意味着这个定义

  

指令(name:string,inlineAnnotatedFunction:any []):IModule;

以下定义更合适:

  

指令(name:string,directiveFactory:IDirectiveFactory):IModule;

我对打字稿完全不熟悉,所以我认为我做错了,但我找不到与谷歌有关的任何内容。

3 个答案:

答案 0 :(得分:4)

我从旧的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);
            }
       });

错误消失:)

答案 1 :(得分:3)

在指令中运行compile时,它必须始终返回一些内容,因此在这种情况下,添加到编译函数底部的简单return true;将解决您的问题。

答案 2 :(得分:2)

也许你必须更新你的angular.d.ts版本,因为在the latest我可以看到:

  

指令(name:string,directiveFactory:IDirectiveFactory):IModule;

这将在编译后提供类似:.directive('myCustomer', function(){...}

就在旁边:

  

指令(name:string,inlineAnnotatedFunction:any []):IModule;

在编译后会给出类似.directive('myCurrentTime', ['$interval', 'dateFilter', function($interval, dateFilter) {...}的内容 (它实际上在this commit中发生了变化,但很长一段时间它都是一个错误)

编辑(因为您似乎拥有angular.d.ts的最新版本)

尝试使用以下语法指示函数的返回类型:

var TabsPane = (itemTabs) : ng.IDirectiveFactory => {}