В Typescript, в чем разница между типом и интерфейсом?

В чем разница между следующими?

type Foo = { 
    foo: string 
};
interface Foo {
   foo: string;
}

Ответ 1

Интерфейсы могут быть расширены

interface A {
  x: number;
}
interface B extends A {
  y: string;
}

а также дополненный

interface C {
  m: boolean;
}
// ... later ...
interface C {
  n: number;
}

Типичные псевдонимы, однако, могут представлять некоторые вещи, интерфейсы которых не могут

type NumOrStr = number | string;
type NeatAndCool = Neat & Cool;
type JustSomeOtherName = SomeType;

Итак, если у вас просто простой тип объекта, как показано в вашем вопросе, интерфейс обычно лучше подходит. Если вы обнаружите, что хотите написать то, что не может быть написано как интерфейс, или хотите просто дать что-то другое имя, псевдоним типа лучше.

Ответ 2

Кроме того, может быть реализован интерфейс.