Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类型脚本命名参数,如angularjs中使用的参数?_Angularjs_Typescript - Fatal编程技术网

类型脚本命名参数,如angularjs中使用的参数?

类型脚本命名参数,如angularjs中使用的参数?,angularjs,typescript,Angularjs,Typescript,我正在尝试学习typescript和angularjs(因此,我是一个noob,学习javascript) 通过angularjs教程,我看到他们做了如下工作: interface Example { ($scope: bool, $location: string, Project: number): void; ($location: string, $scope: bool, Project: number): void; (Project: number, $sc

我正在尝试学习typescript和angularjs(因此,我是一个noob,学习javascript)

通过angularjs教程,我看到他们做了如下工作:

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;
在普通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来包装它(强烈地键入这种灵活的属性注入)

有什么想法吗?

有一个可以让你使用字体脚本的角度

如果我正在为这样的现有函数创建一个定义(在没有命名参数的情况下),我可能会按照特定的顺序定义它们(即使我知道它们可以在普通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;
当我尝试调用
示例(
时,我会使用三个选项获得intellisense,如果我不使用其中一个组合,则会收到编译器警告

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

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

var example = function (exampleArguments: ExampleArguments) {

};

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

它是静态输入并签入TypeScript的。

基本上听上去像是在说“不,你做不到”.是这样吗?我使用angularjs d.ts,这没有任何帮助。另外,您的底层示例angular的框架进行调用,所以我无法控制。也许typescript现在没有任何方法来处理这个问题,嗯。命名参数是被提出的,但被typescript语言规范拒绝了-所以这是不可能的le允许完全如您所描述的那样,但您可以将其形式化,使其处于固定顺序,并得到您想要的(即使Angular会接受任何顺序)。