В чем разница между следующим?В Typcript, в чем разница между типом и интерфейсом?
type Foo = {
foo: string
};
interface Foo {
foo: string;
}
В чем разница между следующим?В Typcript, в чем разница между типом и интерфейсом?
type Foo = {
foo: string
};
interface Foo {
foo: string;
}
Интерфейсы могут быть продлен
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;
Так что, если у вас просто простой тип объекта, как показано в вашем вопросе, интерфейс обычно лучше подходит. Если вы обнаружите, что хотите написать что-то, что нельзя написать как интерфейс, или хотите просто дать что-то другое имя, псевдоним типа лучше.
'Типичные псевдонимы, однако, могут представлять собой некоторые вещи, которые могут не соответствовать интерфейсам. Кажется, что ваши примеры' NeatAndCool' и 'JustSomeOtherName' могут быть созданы как интерфейс, расширяющий существующие типы' Neat', 'Cool' или' SomeType' , –
Спецификация имеет хорошее обсуждение - https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#3.10
Типы вроде как интерфейсы и наоборот: оба могут быть реализованы классом. , но есть некоторые важные отличия: 1. Когда Type реализуется классом, свойства, принадлежащие типу, должны быть инициализированы внутри класса, тогда как с интерфейсом они должны быть объявлены. 2. как сказал @ryan: интерфейс может расширить другой интерфейс. Типы не могут.
type Person = {
name:string;
age:number;
}
// must initialize all props - unlike interface
class Manager implements Person {
name: string = 'John';
age: number = 55;
// can add props and methods
size:string = 'm';
}
const jane : Person = {
name :'Jane',
age:46,
// cannot add more proprs or methods
//size:'s'
}
тип не может быть расширен как расширение интерфейса. типы - это просто псевдонимы для типа. – PSL
Руководство доступно здесь: https://basarat.gitbooks.io/typescript/content/docs/types/type-system.html#type-alias – basarat
В основном я использую тип для внешних данных, например, из файла JSON, или если вы пишете только функции без использования классов ООП. – Kokodoko