136 votes

En caractères d'imprimerie, quelle est la différence entre le type et l'interface?

Quelles sont les différences entre la suivante?

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

144voto

Ryan Cavanaugh Points 17393

Les Interfaces peuvent être prolongée

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

et aussi augmentée

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

Type d'alias, cependant, peuvent représenter certaines choses interfaces ne peuvent pas

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

Donc, en général, si vous avez juste un simple type d'objet, comme indiqué dans votre question, une interface est généralement une meilleure approche. Si vous vous trouvez vouloir écrire quelque chose qui ne peut pas être écrit comme une interface, ou voulez juste donner quelque chose d'un autre nom, un type d'alias, c'est mieux.

7voto

amit77309 Points 3489

Les différences entre ces trop sont déjà dans ce fil.

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

Ici, type Foo etinterface Foo semble à peu près semblable, de sorte que son confus.

interface du contrat est que les propriétés suivantes (icifoo:string) devrait être là dans un objet. interface n'est class. Il est utilisé quand le langage ne supporte pas l'Héritage Multiple. Donc, interface peut être une structure commune entre les différentes classes.

class Bar implements Foo {
    foo: string;
}

let p: Foo = { foo: 'a string' };

Maistype et interface sont utilisés dans le contexte très différent.

let foo: Foo;
let today: Date = new Date();

Ici, type de foo est Foo et today est Date. C'est comme une variable decleration qui détient les informations de typeof d'une autre variable. type , c'est comme un sur-ensemble des interfaces, classes, signature de fonction, les autres types de valeurs (comme type mood = 'Good' | 'Bad'). À la fin de l' type décrit la structure ou de la valeur d'une variable.

5voto

bcherny Points 1932

3voto

nadav Points 50

Types est un peu comme les Interfaces et vice-versa: les deux peuvent implémentée par une classe. mais il ya quelques différences importantes: 1. quand le Type est implémentée par une classe, les propriétés qui appartiennent au Type doit être initialisée à l'intérieur de la classe, alors qu'avec une Interface qu'ils doivent être déclarés. 2. @ryan mentionnés : l'Interface peut étendre une autre Interface. Types de ne peut pas.

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'
}

1voto

Dave Ford Points 790

Aussi, une interface peut être mis en œuvre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X