TypeScript(d.ts)可以用类型化的args描述一个匿名方法吗?

时间:2012-11-02 02:42:52

标签: typescript

为什么导出函数定义(tree.d.ts文件)中不存在ITreeArgs?

interface ITreeArgs {
    mayHaveChildren: bool;
}

export function(args: ITreeArgs); <- The name 'ITreeArgs' does not exist in the current scope

这两个都有效:

export function c(args: ITreeArgs); <- adding name works!
export function (args); <- removing type works!

3 个答案:

答案 0 :(得分:2)

我这样做(在dojo.d.ts文件中):

module "dojo/on" {
    function (target: Element, type: string, listener: (e: Event) => void);
}

然后我像这样导入它:

import on = module("dojo/on");

并将此模块用作纯函数,如下所示:

on(this.goButton, "click", this.ongo.bind(this));

答案 1 :(得分:1)

您需要为您的函数命名,使其成为有效的语法 - 这是真正的错误。

ITreeArgs可用,只需添加名称即可。

interface ITreeArgs {
    mayHaveChildren: bool;
}

export function functionName(args: ITreeArgs) {
    //function body
}

我不确定你想要省略功能名称的原因是什么?

更新:要在接口上声明构造函数,请使用:

interface ITreeArgs {
    new (myArg: string);
}

要在定义文件中的类上声明构造函数,您可以使用:

declare class MyClass {
     constructor(myArg: ITreeArgs);
}

无法在模块上声明构造函数。

在语言规范中,它表示您可以在declare文件中省略.d.ts关键字 - 但实际上我发现如果有人没有发现文件,它会让事情变得非常明确扩展

答案 2 :(得分:0)

名称要求仅用于导出,因为Typescript将添加代码

namespace.function_name = ...

所以不清楚为什么有人想匿名出口东西:)

但是例如,如果你想从另一个函数返回类型化的匿名函数,你可以这样做。

function foo() {
    return function(bar:string):string { return bar; }
}