Tipo de texto: Interfaces vs tipos

Qual é a diferença entre estas declarações (interface vs tipo)?

interface X {
    a: number
    b: string
}

type X = {
    a: number
    b: string
};
 256
Author: Thomas Eding, 2016-05-15

2 answers

De acordo com a especificação da linguagem de Tipo :

Ao contrário de uma declaração de interface, que sempre introduz um tipo de objeto nomeado, uma declaração de tipo alias pode introduzir um nome para qualquer tipo de tipo, incluindo tipos primitivos, União e interseção.

A especificação continua a mencionar:

Os tipos de Interface têm muitas semelhanças com os nomes alternativos do tipo de objecto literais, mas como os tipos de interface oferecem mais capacidades sao geralmente preferiu escrever pseudónimos. Por exemplo, o tipo de interface

interface Point {
    x: number;
    y: number;
}

Pode ser escrito como nome alternativo

type Point = {
    x: number;
    y: number;
};
No entanto, fazê - lo significa que se perdem as seguintes capacidades:
  • uma interface pode ser nomeada numa cláusula de extensão ou implementa, mas um nome alternativo para um tipo de objeto literal não pode.
  • uma interface pode ter várias declarações fundidas, mas um nome alternativo para um tipo de objecto literal não pode.
 301
Author: Binary Birch Tree, 2016-05-15 02:01:28

Https://www.typescriptlang.org/docs/handbook/advanced-types.html

Uma diferença é que as interfaces criam um novo nome que é usado em todo o lado. Digite os nomes alternativos não criam um novo nome - por exemplo, as mensagens de erro não irão usar o nome alternativo.

 23
Author: nickf, 2017-02-16 12:13:40