Ситуация такая: я проверяю наличие нативного
Set-а и если он есть, то модуль возвращает его, если нет, то полифил. Выглядит примерно так:
let Set = (<any>window).Set;
if (!Set || Set.toString().indexOf('[native code]') == -1) {
Set = class Set<T> {
// ...
};
}
export = Set;
Проблема в том, что когда я где-то использую этот модуль, я не могу использовать тип Set:
import Set = require('./Set');
let s: Set<Node> = new Set<Node>();
говорит, что не знает что такое Set.
Если всегда возвращать класс, то всё норм, но нужно как-то вклинить нативный вариант. Пробовал всяко переписывать:
class Set<T> {
// ...
};
let NativeSet = (<any>window).Set;
export = NativeSet && NativeSet.toString().indexOf('[native code]') != -1 ? NativeSet : Set;
так тоже не выходит. Затипизировать NativeSet в выражении export-а как <type<Set<T>>>
тоже не даёт.