5

TypeScript 0.9 ではこれができなくなったようです。

declare module "mymodule" {
    export function(): any;
}

エクスポートされたモジュールを 0.9 で呼び出すことができるタイピングを作成する方法はありますか?

エクスポートされた関数には名前がないことに注意してください。これは、以前のバージョンの typescript で呼び出し可能なモジュールを宣言する方法です。これは、関数だけをエクスポートするノード モジュールが多数あるためです。

4

4 に答える 4

6

この変更は意図的に行われているように見え、それを行う方法はもうありません。

The ‘module’ keyword no longer creates a type

Description: In 0.9.0, a clearer distinction is made between roles of namespaces, types, and values. Modules now contribute only to namespaces and values and will no longer contribute a type. 
Reason: This simplification of the role of modules allow modules to now extend classes and functions more easily.

から: http://blogs.msdn.com/b/typescript/archive/2013/04/22/announce-0-9-early-previews.aspx

于 2013-05-06T09:50:20.933 に答える
4

@Westonは近かったので、関数と同じ名前の内部モジュールも追加する必要があることがわかりました:

declare module "mymodule" {
    function placeholder(): any;
    module placeholder {}
    export = placeholder;
}
于 2016-01-11T23:45:09.410 に答える
-1

私はそれをどのように行っているかの例を持っています。

https://gist.github.com/danatcofo/9116918

/*
 * This is an example of how to turn your typescript modules into functions. 
 */
function Example(command: string, ...params: any[]): void;
function Example(command: string, ...params: any[]): any {
  var isConstructor = false;
  if (this instanceof Example && !this.__previouslyConstructedByExample) {
    isConstructor = true;
    this.__previouslyConstructedByExample = true;
  }
  switch (typeof (Example[command])) {
    case "function":
      if (isConstructor) {
        return (function(cls, args){
          function F(): void {
            return cls.apply(this, args);
          }
          F.prototype = cls.prototype;
          return new F();
        })(Example[command], params);           
      } 
      return Example[command].apply(Example, params);
    case "undefined": throw "unknown command call";
    default: 
      if (isConstructor) throw "unknown command call";
      return Example[command];
    }
}

module Example {
  export function Func0(parm1:string): string {
    var ret = "Func0 was called: parm1 = " + parm1;
    console.debug(ret);
    return ret;
  }
  export function Func1(parm1:string, parm2: string): string {
    var ret = "Func1 was called: parm1 = " + parm1 + ", parm2 = " + parm2;
    console.debug(ret);
    return ret;
  }

  export class Test {
    public ret: string;
    constructor(parm1: string, parm2: string){
      this.ret = Func1(parm1, parm2);
    }
  }
}

var func0 = Example.Func0("hello world");
var func0_fn = <any>Example("Func0", "hello world");
console.assert(func0 == func0_fn, "single param example")


var func1 = Example.Func1("hello", "world");
var func1_fn = <any>Example("Func1", "hello", "world");
console.assert(func1 == func1_fn, "multi param example")

var test = new Example.Test("hello", "world");
var test_fn = new Example("Test", "hello", "world");

console.assert(test instanceof Example.Test, "class example");
console.assert(test_fn instanceof Example.Test, "function class example");
于 2014-02-21T16:09:14.630 に答える