Search
Write a publication
Pull to refresh
1
0
Александр @AlexandroppolusX

User

Send message

Ага, спасибо. На всякий допишу тут ещё 2 поинта (если вдруг у читателей возникнут вопросы). Во первых, для типов/интерфейсов нет разницы в поведении между стрелочной и "обычной" формой, как для объектов js (значения this, super, и т.д.), и реализовывать в классе можно и так и сяк, что видно в примере. Во вторых, если нужны перегрузки, то, например, аналогом такого для "обычной" формы

interface IA {
  setValue(a: number | string): void;
  setValue(a: boolean): boolean;
}

будет такой код

interface IA {
  setValue: {
    (a: number | string): void;
    (a: boolean): boolean;
  };
}

  1. При реализации интерфейсов, и работе с объектами корректность соблюдения принципа подстановки Барбары Лисков ложится на плечи разработчиков.

Просто надо по возможности использовать "стрелочную" форму, тогда всё будет окей.

interface IA {
  setValue: (a: number | string) => void;
}

Забавно, что даже для тайпгардов можно обойтись без any, если использовать бивариантную функцию:

type TypeGuard<A, R extends A> = {f(a: A): a is R}['f'];

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity

Specialization

Frontend Developer
Senior
JavaScript
TypeScript
React