У меня есть тип объекта, который можно расширить в javascript
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 библиотеки как полезное дополнение к документам.