Quali sono le differenze tra quanto segue?In Typescript, qual è la differenza tra tipo e interfaccia?
type Foo = {
foo: string
};
interface Foo {
foo: string;
}
Quali sono le differenze tra quanto segue?In Typescript, qual è la differenza tra tipo e interfaccia?
type Foo = {
foo: string
};
interface Foo {
foo: string;
}
interfacce possono essere estese
interface A {
x: number;
}
interface B extends A {
y: string;
}
e anche augmented
interface C {
m: boolean;
}
// ... later ...
interface C {
n: number;
}
alias tipo, tuttavia, può rappresentare alcune cose interfacce non possono
type NumOrStr = number | string;
type NeatAndCool = Neat & Cool;
type JustSomeOtherName = SomeType;
Quindi, in generale, se si dispone solo di un tipo di oggetto semplice, come mostrato nella domanda, un'interfaccia di solito è un approccio migliore. Se ti senti di voler scrivere qualcosa che non può essere scritto come un'interfaccia, o vuoi semplicemente dare qualcosa a un nome diverso, un alias di tipo è meglio.
'Gli alias di tipo, tuttavia, possono rappresentare alcune cose che le interfacce non possono' Sembra che i tuoi esempi 'NeatAndCool' e' JustSomeOtherName' possano essere creati come interfaccia che estendono i tipi 'Neat',' Cool' o 'SomeType' esistenti . –
La specifica ha una buona discussione - https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#3.10
I tipi sono come le interfacce e viceversa: entrambi possono essere implementati da una classe. ma ci sono alcune importanti differenze: 1. quando Type è implementato da una classe, le proprietà che appartengono al Type devono essere inizializzate all'interno della classe, mentre con Interface devono essere dichiarate. 2. come @ryan menzionato: l'interfaccia può estendere un'altra interfaccia. I tipi non possono.
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'
}
tipo non può essere esteso come estensione di interfaccia. i tipi sono solo alias per un tipo. – PSL
Guida disponibile qui: https://basarat.gitbooks.io/typescript/content/docs/types/type-system.html#type-alias – basarat
Per lo più uso il tipo per dati esterni, ad esempio da un file JSON, o se stai solo scrivendo funzioni senza utilizzare le classi OOP. – Kokodoko