Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.08.2017, 20:08
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Angular 2+: Ошибка при добавлении метода в декораторе класса
class Base {

}

function addGet () {
  return (target: any) => {
    const original = target;

    const constructor : any = function (...args) {
      this.get = function () {
        console.log('GET METHOD');
      }
    };
    constructor.prototype = original.prototype;

    return constructor;
  };
}

@addGet()
class ExtendedBase extends Base {

}

(new ExtendedBase()).get(); //Error: TS2339: Property 'get' does not exist on type 'GlbServersResource'.


IDEA и компилятор ругаются, что метод get не объявлен, хотя он добавляется в декораторе и код отлично работает. Это бага компилятора или что-то криминальное делаю? Как это обойти?

P.S. Добавлять метод в тело ExtendedBase и использовать декораторы методов не предлагать

Последний раз редактировалось Shitbox2, 01.08.2017 в 20:11.
Ответить с цитированием
  #2 (permalink)  
Старый 02.08.2017, 06:49
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

(new ExtendedBase() as any).get();
Ответить с цитированием
  #3 (permalink)  
Старый 02.08.2017, 11:31
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Спасибо! Как-то даже не подумал о таком способе) Тут, кстати, бурное обсуждение идет по этому поводу, народ тоже возмущается.

Еще вопрос сопутствующий. В JS можно динамически создать класс? Не по-старинке, сгенерировав прототип, а используя новый синтаксис class MyClass {}?
Ответить с цитированием
  #4 (permalink)  
Старый 02.08.2017, 12:08
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Shitbox2,
Цитата:
В JS можно динамически создать класс?
выполнять eval в global scope
<script>
var txt = `var c = class SomeClass {constructor() {this.text = 'blabla'}}`;
eval.call(this, txt);
console.log(new c());
</script>
Ответить с цитированием
  #5 (permalink)  
Старый 02.08.2017, 15:31
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Ну с eval'ом-то всё можно)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при обработке данных TBUCTEP Общие вопросы Javascript 11 12.05.2017 14:56
Не работает transition при добавлении класса (pure JS) phoenix200689 Events/DOM/Window 1 04.02.2017 22:36
Скролл окна при добавлении контента "сверху"" yaneblog Events/DOM/Window 0 22.01.2010 23:00
Ошибка при добавлении обработчика к событию Riim Events/DOM/Window 32 19.01.2010 14:17
как при добавлении изображения на сервер считывать имя в БД? solomusic Серверные языки и технологии 3 12.06.2008 23:28