我在我的一个项目中遇到了一些意想不到的行为,所以我将它隔离为我能做到的仍然存在问题的最小示例。我正在使用最新的 TypeScript 版本 0.9.1.1
module module2 {
export interface IAnimal {
colour:string;
}
}
module module1 {
export interface IInjector {
get(className:string):void;
}
}
module module1 {
export interface IInjector {
get(className: "module2.IAnimal"):module2.IAnimal;
}
class Injector implements module1.IInjector {
public get(className:string):any {
return {colour:"Blue"};
}
}
export var injector:IInjector = new Injector();
}
module module2 {
module1.injector.get("module2.IAnimal").surname;
}
产生预期的错误错误 TS2094:“IAnimal”类型的值上不存在“姓氏”属性。
如果我交换前两个模块的定义,我不再得到预期的错误
module module1 {
export interface IInjector {
get(className:string):void;
}
}
module module2 {
export interface IAnimal {
colour:string;
}
}
module module1 {
export interface IInjector {
get(className: "module2.IAnimal"):module2.IAnimal;
}
class Injector implements module1.IInjector {
public get(className:string):any {
return {colour:"Blue"};
}
}
export var injector:IInjector = new Injector();
}
module module2 {
module1.injector.get("module2.IAnimal").surname;
}
我实际上希望显示错误以表明我在 IDE 中犯了错误。我的问题是为什么它出现在第一个例子中而不是第二个例子中?