У меня есть тип объекта, который может быть расширен в JavaScriptExtensible Object В Машинопись Определение
var myObject = Library.LibraryType();
myObject.myExtension = MyExtension();
Пока расширение придерживается какой-то интерфейс, то LibraryType
может сделать полезные вещи с ним.
Но как это выразить в файле определения машинописных текстов? Я не хочу, чтобы пользователи все время делали все до <any>
.
Я хотел сделать это со словарем. Но компилятор жалуется, поскольку все остальные члены не придерживаются определения словаря.
export interface IExtension {
}
export interface IExtensibleLibraryType {
something: string;
otherthing: (args: number) => void;
[ keyOfExtension: string ]: IExtension;
}
В нем говорится, что все остальные члены не являются IExtension
.
Я бы подумал, что компилятор только бы ввел в действие, что к членам словаря обращаются как к словарю mytype['keyOfExtension']
, к которому можно получить доступ ко всем другим членам с помощью нотации .
? Почему это не так?
Есть ли способ обойти это? Или Мне просто нужно сказать всем, чтобы они набрали any
все время? Или заставляют пользователей расширять сами интерфейсы в своем собственном коде (лучший вариант, но я уверен, что люди с большей вероятностью будут делать первые)?
Мне бы очень хотелось, чтобы .d.ts
мог полностью описать API библиотеки, как полезное дополнение к документам.