2014-09-21 34 views
1

以下非常简单的代码输出错误,说'对象没有sayHello方法'。为什么TypeScript检测不到TestModule具有TestModule类型?恒定的过载不起作用

interface TestModule extends Object { sayHello(); } 
interface ModuleHub { 
    (file: string): Object; 
    (file: 'test-module'): TestModule; 
} 

var require: ModuleHub; 
var testModule = require('test-module'); 
testModule.sayHello(); 

回答

1

重载顺序很重要。你需要在通用之前重载字符串参数:

interface TestModule extends Object { sayHello(); } 
interface ModuleHub { 
    (file: 'test-module'): TestModule; // Before 
    (file: string): Object;   // Generic last as a catchall 
} 

var require: ModuleHub; 
var testModule = require('test-module'); 
testModule.sayHello(); 
+0

谢谢。我也发现你可以这样做: interface ModuleHub {(file:string):Object; } 接口ModuleHub {(file:'test-module'):TestModule; } 不知道为什么,虽然。 – FremyCompany 2014-09-22 11:03:15