考慮以下幾種類型:字符串文字參數作爲編譯時類型名稱
interface ActiveXObject {
new(progid: 'Word.Application'): Word.Application;
new(progid: 'Word.Document'): Word.Document;
}
其採取各種字符串文本,並返回相應類型:
declare namespace Word {
interface Application { }
interface Document {
Save(): void;
}
}
如下我可以寫多個重載。因此,下面可能不會編譯:
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');
有趣的問題。相關/可能的重複:[動態加載打字稿類 - 反射Typescript](https://stackoverflow.com/questions/15338610/dynamically-loading-a-typescript-class-reflection-for-typescript)和 [如何將字符串值轉換爲在Angular 2中鍵入](https://stackoverflow.com/questions/35356988/how-to-convert-a-string-value-to-type-in-angular-2) – Pac0
@ Pac0 Both問題涉及在運行時從字符串創建實例;我對編譯時感興趣。 AFAICT,所有的答案要麼將結果轉換爲明確的類型,要麼只是使用'any'。 –
是的,我沒有標記你的帖子,並正在閱讀這些。恐怕沒有優雅簡單的答案,只要你願意。但我不是專家,所以我不會將我的意見轉化爲答案。 – Pac0