16

我正在尝试同时学习 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 中,(强烈键入这种灵活的属性注入)

有任何想法吗?

4

1 回答 1

15

绝对类型上有一个AngularJS 类型定义,可让您使用来自 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 中静态输入和检查的。

于 2013-02-18T09:28:30.150 回答