Es una colección de datos ordenada. Los definimos de la siguiente manera:
let prices =[1,2,3,4,5];/* Método Push para agregar un elemento al final del array */prices.push(6);console.log(prices);// [1,2,3,4,5,6]
Para el arrayprices, TypeScript, de no indicarle explícitamente, va a inferir que este solo contendrá valores del tipo number, por lo que si se quiere agregar un valor string, por ejemplo, nos indicará un error:
//TypeScriptprices.push("texto");//ERROR. Se espera agregar solo números al array.
Esto debido a que en su inicialización se le asignó un array que solo contenía números.
También nos indicará error si pretendemos hacer operaciones exclusivas de un tipo de dato sobre la de otro tipo:
let meses =["Mayo","Junio","Julio"];meses.map( item => item *2);//ERROR. Se pretende realizar una multiplicación usando strings.
Tipado de arrays en TypeScript
Lo puedes definir así:
Indicar explícitamente los tipos de datos que almacenará el array:
let prices:(number|string)[]=["hola",2,4,6,"mundo"];let otherPrices:(boolean|number)[];
Para este caso, a menos que la variable sea una constante, no es necesario que inicialices la variable, pues ya le indicaste el tipo de dato.
En la inicialización de la variable, colocar datos con el tipo de dato que quieres que soporte tu array en adelante para que lo pueda inferir TypeScript:
//TypeScriptlet prices =["hola",2,4,6,"mundo"];// "hola", "mundo" => string// 2,4,6 => number
Dejamos claro que queremos que soporte los tipos de dato string y number.
el curso de manipulación de arrays es buenísimo ...
es uno de los mejores cursos, estoy deacuerdo contigo!
Con los playgrounds si se merece ese titulo
📌📍📝 ==> La forma correcta de asignarle el tipo a un array cuando contiene numeros, strings y booleans es:
letprices:(number | string | boolean)[]
En TS existen las Tuplas, el cual es el caso que has subido.
// Tuplasconsthero:[string, number, boolean]=[‘Dr Strange’,100,false];// Arreglos con diferentes tiposletprices:(number | string | boolean)[]=[“hola”,2,true]
Creo que al profe se le paso el Object con mayuscula.
recordemos la diferencia entre object y Object.
recordemos que object es el correcto, por que nos va a diferenciar entre datos primitivos (number, string, boolean, etc) y todo lo que no sea esto, puede caber dentro de object.
Documentacion oficinal de typescript
Cierto Miguel! Gracias a eso se me produjo este bug:
Usando Object, me permitió usar el tipo Boolean sin haberselo dicho:
!Imgur
.
Usando object, ya reaccionó como era y no me lo permitió:
!Imgur
(()=>{const prices =[1,2,3,4,5,6,'hola',true];//lo que no puedo hacer// prices.push('jkgdsakjgd');// prices.push(true);// prices.push({}); prices.push(12313131);let products =['hola',true]; products.push(false);//para escribir booleans, numbers y strings hay que hacerlo de forma explicita//se puede usar | objecta y acepta arrays y objetos pero para eso hay un modulo más adelanteconstmixed:(number | string | boolean)[]=['hola',true];//ahora si me deja ingresar números mixed.push(12);let numbers =[1,2,3,4,5,6,7,8]; numbers.map(item=> item *2);console.log(numbers);})();
Siempre hay un crack que pasa el código de la clase.
Excelente Servicio man ⭐ ⭐ ⭐ ⭐ ⭐
¿No el tipo de dato es "object" con minuscula al definir el arreglo explicito?
Sí, tienes razón, no se debió usar Object es mayúscula sino en minúscula de esta manera:
.
Por ultimo, cuando un array contiene otros arrays u objetos podemos usar el tipo de dato Object
constarr:Object[]=[{},[],{},[]]
Usando Object, me permitió usar el tipo Boolean sin habérselo dicho:
!Imgur
.
Usando object, ya reaccionó como era y no me lo permitió:
!Imgur
Escriban lo siguiente en chatGPL y vean la magia:
Creame un snippet para declarar un array en ts que reciba todo tipo de datos y nombralo como "universalarray"
chatGPL?
Este tema es el que mas me ha dado problemas desde siempre con typescript, ahora lo entiendo claramente
Una consulta, por que cuando declaro la variable con asignacion me deja hacer push de dato normal:
pero cuando solo hago la declaracion y luego el push, me arroja este error?🤔
Hola, es justo por lo que dice en el error, en donde te menciona que no puedes ingresar valores al array sin inicializarlo antes.
object !==Object?
constnumeros: number[]=[1,2,3,4,5];//@ts-ignore: Esto da error porque un array de números no acepta textosnumeros.push('hola');constcadenas: string[]=['Hola','que tal','bien','chau'];//@ts-ignore: Esto también da error por lo mismo en este caso de stringscadenas.push(1);//Más de un tipo de datoconstpoblationCountries:(string | number)[]=["Paraguay",7000000,"Uruguay",4000000];//@ts-ignore: Da error porque no lo pusimos en el mixin de datatypes poblationCountries.push(true);//La forma implícita es la más recomendable siempre y cuando se puedaconst inferedNumbers =[1,2,3,4,5];//@ts-ignore: Esto da error igual de forma inferidainferedNumbers.push('hola');const inferedStrings =['Hola','que tal','chau'];//@ts-ignore: Esto da error igual de forma inferidainferedStrings.push(1);//Más de un tipo de datoconst inferedPoblationCountries =["Paraguay",7000000,"Uruguay",4000000];//@ts-ignore: Da error porque no lo pusimos en el mixin de datatypes inferedPoblationCountries.push(true);
La forma correcta de asignarle los tipos que admite un array es la siguiente, así evitamos que la variable prices no sea usada como array
Como aprendizaje esta bien, aunque creo que es una mala practica mezclar tipos de datos en un array.
alt + 1 = | (pipe) en Mac
Como puedo agregar ese tooltip a mi vscode? tengo el intellisens para el auto complete pero no el que te muestra el tipo de variable y eso
Si quiero que mi array reciba un object que provenga de una interfaz especifica .¿Como lo definiriamos al momento de declarar mi array ?
A parte de number | string | boolean ...
¿Acepta tipo “function” en la declaración explícita?
lo primero que se me vino a la mente es... Como hago para crear un array y saberlo tipar sin saber que datos me vendrían de la API? Luego entendi el punto del tipado JAJAJAJA