enum Cat { cat1 = 'cat1', cat2 = 'cat2', cat3 = 'cat3', cat4 = 'cat4', cat5 = 'cat5' } const category: Cat = 'cat' + cat ¿Por qué recibo un error de mecanografiado para eso? cat es un número, por lo que category es una cadena. Pero quiero definir algunos valores de cadena específicos para esta variable.
Type 'string' is not assignable to type 'Cat'.Supongo que desea que la categoría sea una de Cat, no la enumeración en sí. asi que
const cat = 4; const category = Cat[`cat${cat}`] // category: Cat.cat4Esto también le brinda seguridad al escribir si intenta acceder a un número fuera de rango. patio de juegos
enum Cat { cat1 = 'cat1', cat2 = 'cat2', cat3 = 'cat3', cat4 = 'cat4', cat5 = 'cat5' } const cat = 4; const category = Cat[`cat${cat}`] const cat6 = 6; const category6 = Cat[`cat${cat6}`] // Property 'cat6' does not exist on type 'typeof Cat'.Typescript no puede garantizar que cat sea 1,2,3,4, or 5 ya que también podría ser someThingElse . Por lo tanto, debe decirle a mecanografiado que está seguro de que será del tipo Cat .
El problema aquí es que el compilador no permitirá que 'cat' + someVar se use como tipo Cat .
Tenga cuidado al usar esto, ya que esencialmente sobrescribe el error del compilador. Realmente necesitas asegurarte de que lo que sea que estés haciendo antes siempre sea un gato válido.
enum Cat { cat1 = 'cat1', cat2 = 'cat2', cat3 = 'cat3', cat4 = 'cat4', cat5 = 'cat5', } const category: Cat = (('cat' + cat) as Cat); enum Cat { cat1 = 'cat1', cat2 = 'cat2', cat3 = 'cat3', cat4 = 'cat4', cat5 = 'cat5', } // this would be of however [Cat.cat1, Cat.cat2 ...] would be a lot safer. // I would generally suggest not tot use dynamic enum values like this. for (const i of [1,2,3,4,5]) { const category: Cat = (('cat' + i) as Cat); } // the compiler would allow this as well, since you ensure that you know the type is going to be if type Cat for (const i of ['dog']) { const category: Cat = (('cat' + i) as Cat); }