2015-07-21 129 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