Geekflare cuenta con el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliados comprando enlaces en este sitio.
Comparte en:

Tipo vs. Interfaz en TypeScript

Tipo vs Interfaz en TypeScript
Escáner de seguridad de aplicaciones web Invicti – la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Tipo frente a interfaz es una de las cosas más confusas e interesantes de TypeScript. Intentaremos aclarar esa confusión.

TypeScript se crea encima de JavaScript, que agrega tipos estáticos. Tener tipos es algo maravilloso para los desarrolladores. Escribir tipos será difícil, pero no te arrepentirás a la larga.

TypeScript tiene todos los tipos básicos como número, cadena, booleano, etc. Junto con el tipo básico, TypeScript nos permite crear tipos personalizados y definir cómo se ve un objeto con la ayuda de alias de tipo e interfaces, respectivamente.

A Tipo de alias no es más que un Tipo. Crear un tipo con un nombre personalizado (alias) lo convierte en un alias de tipo, nada más que eso.

Veamos la sintaxis básica de Interfaces y Alias ​​de tipo.

Sintaxis Básica

Interfaces

Las interfaces se declararán con el interface palabra clave. Compruebe la sintaxis de las interfaces a continuación.

interface InterfaceName {
    keyName: typeOfKey
    ...
}

Eche un vistazo al ejemplo de ejemplo a continuación.

interface Site {
    name: string;
    url: string;
    pagesCount: number;
}

const geekflare: Site = {
    name: 'Geekflare',
    url: 'https://geekflare.com/',
    pagesCount: 25
}

Alias ​​de tipo

Los alias de tipo se declararán utilizando el type palabra clave. Compruebe la sintaxis de los alias de tipo a continuación.

type TypeName = {
    keyName: typeOfKey;
    ...
}

Eche un vistazo al ejemplo de ejemplo a continuación.

type Site = {
    name: string;
    url: string;
    pagesCount: number
}

const geekflare: Site = {
    name: 'Geekflare',
    url: 'https://geekflare.com/',
    pagesCount: 25
}

Hemos creado un tipo para el Site usando el interfaz. y tipo alias. Ambos son válidos y se pueden utilizar para los tipos de objetos mencionados en los ejemplos. Solo la sintaxis es diferente en el ejemplo anterior, lo cual es obvio.

Sigamos explorando las diferencias entre ellos para encontrar más cosas.

Tuples

A tupla en TypeScript es una matriz de longitud predefinida escrita. Define los tipos de cada índice.

Podemos declarar tuplas usando alias de tipo. Pero no podemos hacerlo usando interfaces. Veamos cómo hacerlo con alias de tipo.

type Site = [string, string, number]

const geekflare: Site = ['Geekflare', 'https://geekflare.com/', 25]

En el ejemplo anterior, hemos definido el tipo para cada elemento de índice de la matriz. Si le damos algún otro tipo en la matriz, TypeScript arrojará un error.

¿No podemos hacerlo con interfaces?

No podemos hacerlo exactamente como lo hacemos con los alias de tipo. Las interfaces se utilizan para tipos de objetos. Entonces, necesitamos tener la tupla dentro del objeto para usarla en las interfaces. Veamos un ejemplo.

interface Site {
    details: [string, string];
    pagesCount: number;
}

const geekflare: Site = {
    details: ['Geekflare', 'https://geekflare.com/'],
    pagesCount: 25,
}

Si ves el código, tenemos una tupla llamada detalles dentro de la interfaz. Entonces, podemos usar las tuplas dentro de las interfaces.

De manera similar, podemos usar alias de tipo para tipos únicos como cadena, número, booleano, etc. Como la interfaz se usa para los tipos de objetos, podemos usarla para los tipos únicos, como los alias de tipo.

Otra cosa interesante es que podemos usar el tupla de alias de tipo en el capítulo respecto a la las interfaces. Compruebe el siguiente ejemplo.

type Details = [string, string]

interface Site {
    details: Details;
    pagesCount: number;
}

const geekflare: Site = {
    details: ['Geekflare', 'https://geekflare.com/'],
    pagesCount: 25,
}

Pasemos a lo siguiente.

Declaration Merging – Interfaces

La fusión de declaraciones utiliza TypeScript para fusionar tipos de interfaces con el mismo nombre. Veamos el ejemplo para que quede más claro.

interface Site {
    name: string;
}

interface Site {
    url: string;
}

interface Site {
    pagesCount: number;
}

const geekflare: Site = {
    name: 'Geeflare',
    url: 'https://geekflare.com/',
    pagesCount: 25,
}

Si ve el código anterior, hemos declarado la interfaz con el mismo nombre 3 veces. El compilador de TypeScript compilará todos esos 3 formularios en un solo tipo de objeto que incluye todos los tipos de las interfaces que tienen el mismo nombre.

Puede confirmar la fusión de la declaración eliminando una clave de la geekflare objeto. Si quita una de las llaves de geekflare, verá un error.

No podemos hacer lo mismo con los alias de tipo. La mayoría de la gente no usa esa característica. En general, tener múltiples interfaces con el mismo nombre es confuso.

Escriba alias fans, no se preocupe por esta característica de las interfaces 😅.

Extends

Digamos que ha declarado un tipo. Ahora, desea declarar otro tipo junto con los tipos del tipo anterior. En ese caso, podemos ampliar el tipo anterior. Podemos hacerlo con los dos. las interfaces y alias de tipo.

Veámoslos a los dos.

Interfaces

Hay una palabra clave llamada extends para este caso de uso en TypeScript. Lo usaremos para ampliar las interfaces. Veamos el ejemplo.

interface Site {
    name: string;
    url: string;
    pagesCount: number;
}

interface Geekflare extends Site {
    founder: string;
}

const geekflare: Geekflare = {
    name: 'Geekflare',
    url: 'http://geekflare.com/',
    pagesCount: 25,
    founder: 'Chandan'
}

Asimismo, hemos creado Geekflare Interfaz mediante la ampliación de la Site Interfaz. Todos los tipos de Site estará presente en Geeflare Interfaz junto con sus propios tipos. Puedes eliminar name clave de la geekflare variable para confirmarlo.

Podemos extender múltiples interfaces de la siguiente manera.

interface FirstHalf {
    name: string;
}

interface SecondHalf {
    age: number
}

interface Person extends FirstHalf, SecondHalf {
    profession: string
}

const person: Person = {
    name: 'Geekflare',
    age: 7,
    profession: 'Helping Techies'
} 

Intenta ampliar con más de 2 interfaces por diversión. También podemos extender alias de tipo con la Interfaz.

type Site = {
    name: string;
    url: string;
    pagesCount: number;
}

interface Geekflare extends Site {
    founder: string;
}

const geekflare: Geekflare = {
    name: 'Geekflare',
    url: 'http://geekflare.com/',
    pagesCount: 25,
    founder: 'Chandan'
}

Hemos extendido solo un tipo en el ejemplo anterior. Puede extender tantos como desee, de forma similar al ejemplo anterior de extensión de varias interfaces.

Veamos cómo hacerlo con alias de tipo.

Alias ​​de tipo

Podemos extender los alias de tipo usando el tipo de intersección en mecanografiado. Veamos un ejemplo.

type Site = {
    name: string;
    url: string;
    pagesCount: number;
}

type Geekflare = Site & {
    founder: string;
}

const geekflare: Geekflare = {
    name: 'Geekflare',
    url: 'http://geekflare.com/',
    pagesCount: 25,
    founder: 'Chandan'
}

Hemos extendido la Site escribir con founder en Geekflare escribe usando el intersección (&). Puede probarlo quitando una de las llaves del geekflare variable, que arrojará un error.

Similar a las interfaces, podemos extender múltiples tipos de la siguiente manera.

type FirstHalf = {
    name: string;
}

type SecondHalf = {
    age: number
}

type Person = FirstHalf & SecondHalf & {
    profession: string
}

const person: Person = {
    name: 'Geekflare',
    age: 7,
    profession: 'Helping Techies'
} 

También podemos extender interfaces con alias de tipo de la misma manera que las interfaces que extienden alias de tipo. Compruebe el ejemplo a continuación.

interface Site {
    name: string;
    url: string;
    pagesCount: number;
}

type Geekflare = Site & {
    founder: string;
}

const geekflare: Geekflare = {
    name: 'Geekflare',
    url: 'http://geekflare.com/',
    pagesCount: 25,
    founder: 'Chandan'
}

Intente extender la combinación de alias de tipo e interfaces.

Implementing

Esta no es una diferencia entre las interfaces y los alias de tipo. Sólo una característica de class saber.

Una clase puede implementar tanto la interfaz como el alias de tipo de la misma manera. Veamos los ejemplos de ambos.

Interfaces

interface Site {
    name: string;
    url: string;
    pagesCount: number;
}

class Geekflare implements Site {
    name = 'Geekflare'
    url = 'http://geekflare.com/'
    pagesCount = 25

    constructor() {
        console.log(this.name, this.url, this.pagesCount)
    }
}

Alias ​​de tipo

type Site = {
    name: string;
    url: string;
    pagesCount: number;
}

class Geekflare implements Site {
    name = 'Geekflare'
    url = 'http://geekflare.com/'
    pagesCount = 25

    constructor() {
        console.log(this.name, this.url, this.pagesCount)
    }
}

Nota: una cosa para recordar es que no podemos implementar unión (|) or intersección (&) tipos con clases.

Palabras finales

Como ves en los artículos, podemos hacer todo tanto con alias de tipo como con interfaces. Por lo tanto, no podemos decir estrictamente que uno sea mejor que el otro. Al final, es una elección personal elegir uno de ellos. Eventualmente desarrollará su estilo de usarlos.

A continuación, puede consultar Texto mecanografiado frente a Javascript.

Codificación feliz 🙂

Gracias a nuestros patrocinadores
Más lecturas interesantes sobre el desarrollo
Impulse su negocio
Algunas de las herramientas y servicios para ayudar a que su negocio crezca.
  • Invicti utiliza Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en cuestión de horas.
    Prueba Invicti
  • Web scraping, proxy residencial, administrador de proxy, desbloqueador web, rastreador de motores de búsqueda y todo lo que necesita para recopilar datos web.
    Prueba Brightdata
  • Semrush es una solución de marketing digital todo en uno con más de 50 herramientas en SEO, redes sociales y marketing de contenido.
    Prueba Semrush
  • Intruder es un escáner de vulnerabilidades en línea que encuentra debilidades de ciberseguridad en su infraestructura, para evitar costosas filtraciones de datos.
    Intente Intruder