169 похожих чатов

Привет Кто может пояснить про конструкцию typescript class test<A extends B =

C> {

}

Как работать с дженериком я понял, мы можем сделать
new test<number>
И тогда «А» будет типом number

Но что здесь означает правая часть после extends??


Вот так я понимаю что будет

class test<A extends B> {

}

Мы потребуем, что бы A был наследован от B

11 ответов

11 просмотров

Это значит, что тип будет класса B, или унаследованного от него, и по умолчанию будет равен C, если ничего не задано

Нет, A вы будете использовать как указатель на тип внутри класса, например property: A

Araik- Автор вопроса
Iworb
Это значит, что тип будет класса B, или унаследова...

т.е. без "=", тип А будет класса B или унаследованного от него, но по умолчанию не будет ничем а вот с "=" есть возможность не прописывать тип, по умолчанию он будет B

class Some<A extends B = C> { prop: A; } class B {} class C extends B {} const a1 = new Some(); // a1.prop - будет типа C const a2 = new Some<B>(); // a2.prop - будет типа B

Araik- Автор вопроса
Iworb
class Some<A extends B = C> { prop: A; } class B ...

Спасибо большое, я всё проверил, это так Но появился новый вопрос, почему этот код работает ?

Araik- Автор вопроса
Araik
Спасибо большое, я всё проверил, это так Но появи...

Ведь A может быть B или наследоваться от B, как он проглотил вообще какой-то левый инстанс D ??

Araik
Спасибо большое, я всё проверил, это так Но появи...

Потому что по умолчанию в log функцию (которая класс C) вы передаете инстанс объекта D и вызываете у него log. Работать оно будет, т.к. для js код правильный, а вот при компиляции должно ругнуться или выдать предупреждение, посмотрите на вкладках

Тогда странно. А в IDE тоже позволит сделать это? Просто с точки зрения JS код правильный, но при компиляции обычно такие логические ошибки на корню прибиваются. Попробуйте strict режим

Araik- Автор вопроса
Iworb
Тогда странно. А в IDE тоже позволит сделать это? ...

Тишина, шторм молчит тоже, можете сами проверить, если интересно class B { log() { console.log("hello B") } } class C extends B { log() { console.log("hello C"); } } class Some<A extends B = C> { log(arg: A) { arg.log(); } } class D { log() { console.log("hello D!! Oy, no no no...."); } } const instanseD = new D(); const some = new Some(); // a1.prop - будет типа C some.log(instanseD);

Araik- Автор вопроса
Araik
Спасибо большое, я всё проверил, это так Но появи...

Ребят, может кто-то может объяснить развёрнуто, почему этот код работает или может есть ссылка на статью по этой теме?

Araik
Ребят, может кто-то может объяснить развёрнуто, по...

ты хоть some.log({ log: () => {}}) сделай оно ругаться не будет

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта