Skip to content

Commit e77dde4

Browse files
davepagureklimzykenneth
authored andcommitted
Add rest types to parameter data and typescript types
1 parent 92c58b7 commit e77dde4

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

docs/parameterData.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1427,7 +1427,7 @@
14271427
"createVector": {
14281428
"overloads": [
14291429
[
1430-
null
1430+
"...Number"
14311431
]
14321432
]
14331433
},

utils/convert.mjs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ function typeObject(node) {
9292
return { type: signature };
9393
} else if (node.type === 'ArrayType') {
9494
return { type: `[${node.elements.map(e => typeObject(e).type).join(', ')}]` };
95+
} else if (node.type === 'RestType') {
96+
return { type: typeObject(node.expression).type, rest: true };
9597
} else {
9698
// TODO
9799
// - handle record types
@@ -518,19 +520,22 @@ function cleanUpClassItems(data) {
518520

519521
const processOverload = overload => {
520522
if (overload.params) {
521-
return Object.values(overload.params).map(param => processOptionalParam(param));
523+
return Object.values(overload.params).map(param => processParam(param));
522524
}
523525
return overload;
524526
}
525527

526528
// To simplify `parameterData.json`, instead of having a separate field for
527529
// optional parameters, we'll add a ? to the end of parameter type to
528530
// indicate that it's optional.
529-
const processOptionalParam = param => {
531+
const processParam = param => {
530532
let type = param.type;
531533
if (param.optional) {
532534
type += '?';
533535
}
536+
if (param.rest) {
537+
type = `...${type}`;
538+
}
534539
return type;
535540
}
536541

utils/helper.mjs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,8 @@ export function generateTypeFromTag(param) {
392392
const innerTypeStrs = param.type.elements.map(e => generateTypeFromTag({ type: e }));
393393
return `[${innerTypeStrs.join(', ')}]`;
394394
}
395+
case 'RestType':
396+
return `${generateTypeFromTag({ type: param.type.expression })}[]`;
395397
default:
396398
return 'any';
397399
}
@@ -420,6 +422,7 @@ export function generateTypeFromTag(param) {
420422
if (!param) return 'any';
421423

422424
let type = param.type;
425+
let prefix = '';
423426
const isOptional = param.type?.type === 'OptionalType';
424427
if (typeof type === 'string') {
425428
type = normalizeTypeName(type);
@@ -429,7 +432,11 @@ export function generateTypeFromTag(param) {
429432
type = 'any';
430433
}
431434

432-
return `${param.name}${isOptional ? '?' : ''}: ${type}`;
435+
if (param.type?.type === 'RestType') {
436+
prefix = '...';
437+
}
438+
439+
return `${prefix}${param.name}${isOptional ? '?' : ''}: ${type}`;
433440
}
434441

435442
export function generateFunctionDeclaration(funcDoc) {

0 commit comments

Comments
 (0)