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