2016-08-01 10 views
0

1) В TypeScript, как я могу найти все классы, определенные на глобальном уровне?
2) Как я могу отфильтровать их суперкласс?TypeScript/JavaScript: как сканировать для всех глобальных классов (и фильтровать суперкласс)?

У меня есть классы моделей, которые распространяются на FrameModel. Они не известны до выполнения (с возможностью подключения).
Так что я хочу получить список подклассов FrameModel.

Это моя попытка:

public static scan() 
{ 
    this.mapping = {}; 
    for (var i = 0; i < props.length; i++) { 
     var key = props[i]; 
     var val = window[key]; 
     console.log(`Key: ${key} Val: ${val} ${typeof val}`); 
     if (val == null) 
      continue; 
     if (typeof val !== 'function') 
      continue; 
     if (val.prototype == void 0) 
      continue; 
     if (val.prototype.constructor !== FrameModel) 
      continue; 
     this.mapping[key] == val; // Doesn't work 
    } 
} 

Что я считаю проблематична:

  1. Использование window - скажем, это не будет работать в браузере. Тогда мне нужен глобальный объект вообще. В каком-то контексте я видел использование , IIRC в функции, вызываемой вне объекта, для получения глобального объекта. Это «официальный» способ?

  2. window[key] не работает - Window не присваиваемый TYPEOF FrameModel

  3. Он сканирует весь реквизит Window, а не только Functions. Я предполагаю, что есть более разумный способ получить список Function s.

TypeScript 1.8. Playground

+0

Вы не можете делать то, что, если я определил мой класс в затворе? –

+0

Хорошо, изменилось - мне нравятся только классы, определенные на глобальном уровне. Я не видел класс, определенный в закрытии в машинописном тексте, как это выглядит? –

+0

Убейте его: https: // github.com/Microsoft/TypeScript/pull/3266 –

ответ

0

Это неизвестно до выполнения (с возможностью подключения).

Магическая интроспекция не очень хорошо работает с JavaScript. Как правило, вы хотите, чтобы некоторые рамки зависимостей (например тот, который поставляется с угловым приводом от явного кода т.е. декораторов)

Я рекомендую смотреть в https://github.com/inversify/InversifyJS как DI рамки выбора.

Больше

Просто для любопытства:

Использование окна - скажем, он не будет работать в браузере. Тогда мне нужен глобальный объект в общем

Если вы используете global Webpack будет автоматически указывать его window когда пакетирования например : console.log(global); // Window. Ofcourse в NodeJs было бы глобальным: https://nodejs.org/api/globals.html#globals_global

Настройка Webpack для машинописи: https://basarat.gitbooks.io/typescript/content/docs/quick/browser.html

 Смежные вопросы

  • Нет связанных вопросов^_^