angularjs - typescript 命名参数就像在angularjs中使用的那样?

标签 angularjs typescript

我正在努力学习 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/

相关文章:

angularjs <timer/>不会更新

javascript - 在 AngularJS 中创建映射(键,值)结构并填充 JSON 中的数据

javascript - 在组件中使用导入的常量而不将其设置为局部变量

reactjs - 在 typescript 中 react 高阶组件(HOC)

javascript - Angular 4 与 AngularJs 指令

angularjs - Angular 不加载模板

typescript - 在同一 session 中调试 VSCode 中的 Typescript 和 C#

javascript - TypeScript 在 Namespace 下扩展 JQuery

typescript - Jest mock 总是给出 undefined (typescript + ts-jest)

javascript - 如何实现关系/嵌套可观察量?