Задать вопрос
@MaksZhukov
programer

В чем отличие type и interface. В каких случаях что использовать?

В чем отличие type и interface. В каких случаях что использовать?
В гугле не совсем понятно мне.
  • Вопрос задан
  • 40160 просмотров
Подписаться 4 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 5
@maltsever
Привет! Грубо говоря, интерфейс лишь описывает функциональность. А класс, который реализует этот интерфейс, должен конкретно функциональность определить. Например:
interface IVegetable {
    name: string;
    getCalories(): number;
}

А конкретный класс:
class Tomato implements IVegetable {
    name: string = 'Tomato';
    getCalories() {
       return 18;
    }
}

Type - это лишь типизация какой-то переменной, как правило, нестандартной, Например, мы хотим определить тип, который будет описывать степень готовности стейков:
type SteakRoast = 'medium' | 'rare' | 'welldone';
Таким образом, мы можем присвоить переменной типа SteakRoast только эти предопределённые значения, а иначе Typescript заорёт из-за несоответствия типа.
Ответ написан
Полезные ссылки, где рассматривается тема отличий Интерфейсов (ключевое слово interface) и Псевдонимов типов (Type Aliases, ключевое слово type):


Это будет полезно для интересующимся данным вопросом и позволит глубже изучить тему.
Ответ написан
Комментировать
feligz
@feligz
JS/TS developer
Есть 2 главных различия между Type alias и Interface ( для версии TS 4.1.3).

1. Нельзя использовать implements, если присутствует оператор union.
type Box = Shape | Figure
class MyBox implements Box {} - ошибка...

2. Нельзя использовать одно имя для нескольких типов. Другими словами, нельзя расширить тип, а вот интерфейс можно ( и это может быть удобно, если нужно расширить интерфейс сторонней библиотеки).
type Box = {}
type Box= {x: number} - ошибка...
Ответ написан
Комментировать
@Topchy
Вот подробно, но на английском. Хотя по примерам всё понятно, но в тексте объяснены тонкие моменты.
Перевода пока не нашёл, у самого времени нет перевести
https://medium.com/@martin_hotell/interface-vs-typ...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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