如何在TypeScript中分配getter / setter函数对?

时间:2014-05-06 15:19:07

标签: angularjs properties typescript setter getter

我正在使用TypeScript和Angular。我有兴趣在控制器的范围内添加一对函数currentPath(): stringcurrentPath(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变量?

1 个答案:

答案 0 :(得分:0)

函数重载只是一种类型系统功能; JavaScript / TypeScript不直接支持函数arity上的重载。

你想写的是:

$scope.currentPath = function(arg?: string) {
    if(arguments.length === 0) {
        return _currentPath;
    } else {
        return _currentPath = arg;
    }
}