我正在尝试学习打字稿和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中,(强烈地键入这个灵活的属性注入)
任何想法?
答案 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中检查。