0

ITreeArgs がエクスポート関数定義 (tree.d.ts ファイル) に存在しないのはなぜですか?

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

name requirement is for export only because Typescript will add code

namespace.function_name = ...

so this is unclear why somebody wants to export something anonymously :)

but for example if you want return typed anonymous function from another function you can do it.

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