Las matrices en cuestión son segmentos de ruta SVG, por ejemplo ['L', 0, 0] Básicamente estoy usando esto para definir estas matrices:
// doSomethingToSegment.js /** @type {Object.<string, number>} */ const paramsCount = { a: 7, c: 6, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, z: 0, }; /** * This definition is WRONG, FIX ME!! * * @typedef {(string|number)[]} segment */ /** * Check segment validity. * * @param {segment} seg input segment * @return {boolean} segment is/not valid */ function checkSegment(seg) { const [pathCommand] = seg; const LK = pathCommand.toLowerCase(); const UK = pathCommand.toUpperCase(); const segmentValues = seg.slice(1); const expectedAmount = paramsCount[LK]; return checkPathCommand(UK) && checkPathValues(segmentValues, expectedAmount); } /** * @param {string} ch input character * @returns {boolean} true when `ch` is path command */ function checkPathCommand(ch) { return ('ACHLMRQSTVZ').includes(ch); } /** * @param {Number[]} values input values * @param {Number} expected amount * @return {boolean} segment has/not the right amount of valid numbers */ function checkPathValues(values, expected) { return values.length === expected && values.every(x => !Number.isNaN(x)); } Ahora la llamada pathCommand.toLowerCase() arroja este error:
Property 'toLowerCase' does not exist on type 'string | number'. Property 'toLowerCase' does not exist on type 'number'. Y el segmentValues arroja este:
Argument of type '(string | number)[]' is not assignable to parameter of type 'number[]'. Type 'string | number' is not assignable to type 'number'. Type 'string' is not assignable to type 'number'. Entonces, ¿cómo definir una definición de tipo personalizada @type {WHAT} segment) que satisfaga esta necesidad específica?
type A = [string, ...number[]];Más información sobre elementos de descanso en tipos de tupla: https://www.typescriptlang.org/docs/handbook/2/objects.html#tuple-types
Aquí hay ejemplos de los documentos:
Las tuplas también pueden tener elementos de descanso, que deben ser de tipo matriz/tupla.
type StringNumberBooleans = [string, number, ...boolean[]]; type StringBooleansNumber = [string, ...boolean[], number]; type BooleansStringNumber = [...boolean[], string, number];