2015-07-21 195 views
1

我在与片的下面的代码问题:打字稿:功能与属性

CoreModule.filter('translateEnum', ['$parse', '$translate', function(
    $parse: angular.IParseService, 
    $translate: angular.translate.ITranslateService 
) { 
    var translateFilter = function (translationId, namespace, interpolateParams, interpolation): string { 
    if (!translationId) { 
     return ''; 
    } else { 
     if (!angular.isObject(interpolateParams)) { 
     interpolateParams = $parse(interpolateParams)(this) 
     } 
     return $translate.instant(namespace + '.' + translationId, interpolateParams, interpolation) 
    } 
    } 
    translateFilter.$stateful = true; 
    return translateFilter; 
}]); 

我得到的编译错误不断:

>> app/modules/core/filters/filters.ts(47,19): error TS2339: Property '$stateful 
' does not exist on type '(translationId: any, namespace: any, interpolateParams 
: any, interpolation: any) => string'. 

的问题是,我需要assing $stateful: boolean属性的函数对象,我不知道如何在打字稿中做到这一点。


这里有一些尝试,我做过,但都失败了:

interface StatefulFunction { 
    (translationId, namespace, interpolateParams, interpolation): string; 
    $stateful: boolean; 
} 

interface StatefulFunction { 
    (...args: any[]): any; 
    $stateful: boolean; 
} 

甚至

interface StatefulFunction extends Function { 
    $stateful: boolean; 
} 
+0

你能尝试'VAR translateFilter:any' – Vasyl

+0

@vmaksym没有****荷兰国际集团的方式。 TypeScript的目标不是通过使用'any'来避免类型检查。 – ducin

回答

1

你可以做些什么像这样:

interface StatefulFunction { 
    (): string; 
    $stateful: boolean; 
} 

var translateFilter = <StatefulFunction>function (/*...*/) { 
    /*...*/ 
}; 

从这个答案改编:https://stackoverflow.com/a/18640025/373655