0

为什么导出函数定义(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!
4

3 回答 3

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));
于 2012-12-05T12:44:07.500 回答
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- 但实际上我发现如果有人没有发现文件扩展名,它会让事情变得非常清楚。

于 2012-11-02T09:15:21.343 回答
0

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

namespace.function_name = ...

所以这不清楚为什么有人想匿名导出一些东西:)

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

function foo() {
    return function(bar:string):string { return bar; }
}
于 2012-11-02T22:41:18.167 回答