我正在使用TypeScript和Angular。我有兴趣在控制器的范围内添加一对函数currentPath(): string
和currentPath(newValue: string): void
,并禁止直接访问支持变量。我也想把这种“类似财产”的行为分解出来。所以我添加了一个界面:
interface Property<T> {
(): T;
(newValue: T): void;
}
然后尝试像这样配置我的范围:
interface ApplicationRootScope extends ng.IScope {
currentPath: Property<string>;
}
appControllers.controller('MyCtrl', ($scope: ApplicationRootScope) => {
var _currentPath = "n/a";
$scope.currentPath = { // this assignment fails
(): string = _currentPath;
(newValue: string) => {
_currentPath = newValue;
}
};
});
标记行的分配失败 - 我故意使用错误的语法来演示我想要做的事情。我有没有办法像这样直接分配currentPath
变量?
答案 0 :(得分:0)
函数重载只是一种类型系统功能; JavaScript / TypeScript不直接支持函数arity上的重载。
你想写的是:
$scope.currentPath = function(arg?: string) {
if(arguments.length === 0) {
return _currentPath;
} else {
return _currentPath = arg;
}
}