TypeScript์˜ ๊ธฐ์ดˆ ๐Ÿฆ†| #12: ์ธํ„ฐํŽ˜์ด์Šค

13822 ๋‹จ์–ด webdevbeginnersspanishtypescript
TypeScript์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ยฟQuรฉ es una interfaz?



En palabras poco tรฉcnicas una interfaz es como una especie de molde para nuestro datos. No debemos confundir el termino con la UI de una app, en este caso el concepto de interfaz se relaciona mรกs con la estructura de los datos de nuestro software. ์˜ˆ๋ฅผ ๋“ค์–ด:

interface Persona {
  id:number;
  nombre: string;
  apellido: string;
  edad: number;
  esSoltero: boolean;
}

interface Perro {
  id:number | string;
  nombre: string;
  color: string[];
  raza:string;
  sexo: "Macho" | "Hembra"
}

interface Vehiculo {
  placa:string;
  color: string;
  ruedas: number;
  puertas: number;
  marca: string;
  esNuevo: boolean;
}

En este caso, tenemos 3 ์ธํ„ฐํŽ˜์ด์Šค: Persona , Perro , Vehiculo . Cada una de ellas se declara con la palabra reservada interface seguido del nombre de la interfaz (en Pascal Case) y entre llaves todas las propiedades con sus tipos de datos separadas por ; .

์ธํ„ฐํŒŒ์ฆˆ ์ฝ”๋ชจ ํ‹ฐํฌ ๋ฐ ๋‹คํ† 



Las Interfaces se usan como tipos de datos Personalizables, con los ejemplos anteriores podrรญamos crear objetos de la siguiente manera:

interface Persona {
  id:number;
  nombre: string;
  apellido: string;
  edad: number;
  esSoltero: boolean;
}

const pedro:Persona = {
  id:1,
  nombre:"Pedro",
  apellido:"Sanchez",
  edad:36,
  esSoltero:true,
}

Nuestra variable pedro es de tipo Persona , por ende debe tener OBLIGATORIAMENTE todas las variables declaradas en Persona .

์—˜ ์ฝ˜ํŠธ๋ผํ†  ๋ฐ ์šฐ๋‚˜ ์ธํ…Œ๋ฅดํŒŒ์ฆˆ



En el ejemplo anterior de dice que pedro cumple el contrato de Persona puesto que tiene todos los datos declarados de manera correcta: id, nombre, apellido, edad, esSoltero Si faltara un dato podrรญamos decir que pedro no cumple con el contrato de Persona puesto que minimamente deberรญa incluir todos los datos de la interfaz.

ํ”„๋กœํ”ผ์—๋‹ค๋ฐ์Šค ์˜ต์…˜



Las Interfaces al igual que las funciones soportan valores opcionales con el operador ?
interface Vehiculo {
  placa:string;
  color: string;
  ruedas?: number;
  puertas?: number;
  marca: string;
  esNuevo: boolean;
}

const hilux:Vehiculo = {
  placa: 'HYK-256',
  color: 'rojo',
  marca: 'Toyota',
  esNuevo: true,
}

La variable hilux es de tipo Vehiculo pero tanto ruedas como puertas son propiedades opcionales, por ello al crear el objeto y no incluir esos valores no tenemos ningรบn

ํ”„๋กœํ”ผ์—๋‹ค๋ฐ์Šค ๋…์ฃผ ๊ฐ•์˜



Con la palabra reservada readonly podemos especificar las propiedades que solo son de lectura y que no podremos cambiar:

interface Perro {
  id:number | string;
  readonly nombre: string;
  color: string[];
  raza:string;
  sexo: "Macho" | "Hembra"
}

// nombre es de solo lectura

const boby:Perro = {
  id: "125-boby",
  nombre:"Boby",
  color: ["cafe","blanco"],
  raza:"cooker",
  sexo: "Macho"
}

boby.raza = "pastor aleman";
console.log(boby)
boby.nombre = "Rufo"

Si Intentamos Cambiar la raza del objeto boby no hay problema, pero si hacemos lo mismo con nombre nos darรก un error:
'nombre'๋Š” ์ฝ๊ธฐ ์ „์šฉ ์†์„ฑ์ด๋ฏ€๋กœ ํ• ๋‹นํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ—ค๋ Œ์‹œ์•„ ๋“œ ์ธํ„ฐํŽ˜์ด์Šค



Usando la palabraextends podemos heredar ์ธํ„ฐํŽ˜์ด์Šค:

interface Vehiculo {
  placa:string;
  color: string;
  ruedas?: number;
  puertas?: number;
  marca: string;
  esNuevo: boolean;
}

interface Bicicleta extends Vehiculo {
  esMontaรฑera: boolean;
  traccion: number;
}

const miBici:Bicicleta = {
  placa: '123-abc',
  color: 'negro',
  marca: 'Santusa',
  esNuevo: true,
  esMontaรฑera:true,
  traccion: 21,
}

La interfaz Bicicleta hereda todas las propiedades de Vehiculo , port tanto, el objeto miBici debe tener tanto los atributos de Bicicleta como los de Vehiculo .

Para este ejemplo podemos hacer opcionales las propiedades ruedas y puertas ya que para la interfaz Bicicleta no tiene mucho sentido.

๊ฒฐ๋ก 


  • Las Interfaces son una forma de estructurar los datos de nuestro software creando tipos de datos especรญficos.
  • Puedes usar parametros opcionales con ?
  • ๋ผ์Šค ์ธํ„ฐํŽ˜์ด์Šค soportan herencia con extends
  • Con readonly podemos hacer propiedades de solo lectura.

  • ์ฐธ์กฐ






    ์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ