打字稿命名参数如在angularjs中使用?

时间:2013-02-18 08:06:53

标签: angularjs typescript

我正在尝试学习打字稿和angularjs(因此javascript因为我是菜鸟)

通过angularjs教程,我看到他们做了这样的事情:

在普通的javascript中:

    //for full example, see the "Wire up a backend" project.js example 
//on the main page of http://angularjs.org 
            function CreateCtrl($scope, $location, Project){
        //do stuff
        }

踢球者,这些参数可以是任何顺序(或根本不存在),而Project实际上是用户定义的变量/类型。 angularjs框架能够将参数映射到实际对象。

现在对于Typescript,我该如何重新创建这种类型的功能?我实际上想以某种方式描述angularjs的行为,让我将它包装在typescript中,(强烈地键入这个灵活的属性注入)

任何想法?

1 个答案:

答案 0 :(得分:9)

有一个AngularJS type definition on Definitely Typed可以让您从TypeScript中使用Angular。

如果我正在为这样的现有函数创建定义(在没有命名参数的情况下),我可能会按特定顺序定义它们(即使我知道它们可以是以普通的JavaScript传递不同的顺序)或者创建一组与我想要公开的可能性相匹配的函数重载,如下所示:

interface Example {
    ($scope: bool, $location: string, Project: number): void;
    ($location: string, $scope: bool, Project: number): void;
    (Project: number, $scope: bool, $location: string): void;
}

declare var example: Example;

当我尝试调用example(时,我会使用这三个选项进行智能感知,如果我不使用其中一种组合,我会收到编译器警告。

在JavaScript中,命名参数通常是用对象创建的,所以如果我正在编写一个可以用这种方式接受参数的新方法,我会这样做......

interface ExampleArguments {
    scope: bool;
    location: string;
    project: number;
}

var example = function (exampleArguments: ExampleArguments) {

};

example({ scope: true, project: 4, location: 'hi' });

静态输入并在TypeScript中检查。