А потому
Статические функции не могут ссылаться на контекст класа
Потому что у статических методов нет инстанса и соответственно контекста класса
Да нет, ошибка не в этом, вот еще пример
https://t.me/ts_cool
Уже написали
да это не тс проблема
А зачем ему контекст? У обычной функции тоже нет контекста, но можно же в ней использовать обобщенный тип
Ты береш Т с контекста
Который сам-же могу подставить через скобочки
Но его не существует для статических методов
Ну окей, тогда вот, контекста то нет, и T -> unknown
public static test<T>(value: T) { return value; } Статические методы не имеют доступа к контексту класса, но ты можешь отдельно им передать параметры типов, как в обычной функции
Контекст появился как только ты создал инстанс класа
Unknown так ты не передал тип
Чтобы у тебя был тип T ты должен сделать так const aa = new AA() aa.getMe() Но когда ты юзаешь стат метод ты делаешь так AA.getMe() То есть ты не создаешь инстанс, ты вызываешь getMe не как метод класса, а как обычную функцию А твой тип T может быть только если ты сделал инстанс (как в первом примере) Вот тебе тс и говорит "Чел, у тебя не будет инстанса так как гетМи статический метод, а значит и типа Т не будет, поэтому у тебя ошибка"
доступно, принял Всем спасибо ♥️
Но я все равно считаю что проблема не в методах, а в полях. В метод можно передать обобщенный тип явно, но проблема начинается там, где есть статические поля с обобщенными типами. Так, если в поле записать что-то с типом "T", то при повторной записи, можно указать явно другой тип, и тут нарушается безопасность типов
Тут дело не в Т а в мат часте контекста джс
https://javascript.info/static-properties-methods
Опа, узнал глубже по статические методы.)
Нет, проблема не в этом. Проблема в том, что вот этот контекст можно зафиксировать в экземпляре, пусть даже unknown, но в самом классе зафиксировать нельзя, и нужно передавать каждый раз с нуля. Если мы посмотрим на статический метод как на чистую функцию, то окей, мы бы могли в нее явно передать тип. Проблема как раз в полях. Если мы у класса сделаем статичное поле, с обобщённым параметром, то писать мы в нее сможем что угодно, что нарушает безопасность, так как контекст не зафиксирован. Это не проблема JS, это ограничение TS, чтобы не нарушать безопасность
Проблема в том, что по задумке статический метод один, а инстансы класса могут быть специализированы для разных типов
Обсуждают сегодня