我正在努力学习 TypeScript 和 Angular(以及 JavaScript)。
通过 Angular 教程,我看到他们做这样的事情:
在普通的 javascript 中:
function CreateCtrl($scope, $location, Project){
// do stuff
}
有关完整示例,请参阅“连接后端”project.js 示例 在 Angular homepage 上.
关键是,这些参数可以按任何顺序排列(或根本不存在),并且 Project
实际上是用户定义的变量/类型。 Angular 框架能够将参数映射到实际对象。
那么现在对于 Typescript,我该如何重新创建这种类型的功能?我想以某种方式描述 Angular 的行为,让我将其包装在 Typescript 中(强类型这种灵活的属性注入(inject))。
最佳答案
有一个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 中静态输入和检查。
关于angularjs - typescript 命名参数就像在angularjs中使用的那样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14931824/