【发布时间】:2017-08-29 07:46:10
【问题描述】:
给定以下类型:
declare namespace Word {
interface Application { }
interface Document {
Save(): void;
}
}
我可以写多个重载如下:
interface ActiveXObject {
new(progid: 'Word.Application'): Word.Application;
new(progid: 'Word.Document'): Word.Document;
}
它采用各种字符串文字并返回相应的类型。因此,以下内容无法编译:
var doc = new ActiveXObject('Word.Document');
//compilation error here -- Word.Document doesn't have this method
doc.BadMethod();
是否可以编写一个返回类型为字符串字面量引用的类型的重载?
类似的东西:
interface ActiveXObject {
new(progid: string): typefrom(progid);
}
并且编译器会将以下内容标记为无法识别的类型:
var nonexistentType = new ActiveXObject('Word.NonexistentType');
【问题讨论】:
-
@Pac0 这两个问题都涉及在运行时从字符串创建实例;我对编译时感兴趣。 AFAICT,所有答案要么将结果转换为显式类型,要么只使用
any。 -
是的,我没有标记您的帖子,并且也在阅读这些内容。恐怕不会有您希望的优雅简单的答案。不过,我不是专家,所以我不会将我的评论变成答案。
标签: typescript