恒定过载不起作用

时间:2014-09-21 22:32:37

标签: typescript constants overloading

以下非常简单的代码会输出一个错误,指出' Object没有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 个答案:

答案 0 :(得分: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();