Si bien TypeScript permite declarar tipos primitivos: bool, string, number, int, tambien nos permite crear nuestros propios tipos, lo que hace que TypeScript sea mas potente. Imaginemos que queremos crear nuestros jugadores de futbol
type Jugador={
name:string,
position:string,
age:number
}
ATENTI
Los tipos siembre van en PascalCase, no en minuscula ni en camelCase
Ahora si quisieramos crear un jugador con nuestro tipo podemos hacerlo asi
let mastantuono: Jugador={
name:"Franco Mastantuono",
position: "Mediocampista",
age: 16
}
A su vez, tambien podemos crear funciones que devuelvan nuestro tipo creado
const crearJugador=(name:string, position:string, age:number): Jugador=>{
return {name, position, age}
}
Los tipos pueden tener propiedades opcionales, es decir, propiedades que no es necesario que se cumplan para que se cree un nuevo tipo. Supongamos que queremos agregarle el equipo a los jugadores y es posible que algunos jugadores no esten en un club en este momento
type Jugador={
name:string,
position:string,
age:number,
club?:string
}
Declarar una variable como opcional tiene una consecuencia lógica. El tipo de dato puede ser el que le digamos o undefined. Si nosotros le damos un valor, tendrá el tipo del valor que le dimos pero si no le damos ningun valor será undefined. Eso significa que cuando sea undefined no podremos hacer muchas cosas, sin embargo cuando no sea queremos que si hagamos algo, como por ejemplo escribir todo el club en mayusculas. Para eso funciona el optional chaining que seria asi
mastantuono.club?.toUppercase()
Algunas veces queremos proteger a los objetos de su mutabilidad. El ejemplo mas comun es cuando no queremos que nadie pueda cambiar el ID de nuestro elemento. Para eso, creemosle un id al tipo Jugador
type Jugador={
id:number,
name:string,
position:string,
age:number,
club?:string
}
Ahora, cualquiera podría hacer un mastantuono.id=1213131232 y eso sería valido. Sin embargo, podemos proteger algunas propiedades creandolas como propiedades de solo lectura solamente agregandole el readonly antes de la misma
type Jugador={
readonly id:number,
name:string,
position:string,
age:number,
club?:string
}