feat: include member names in generated tuple type definitions

- Update schemaToTypeString to include names for named tuple elements
- Generates [current: number, max: number] instead of [number, number]
- Uses TypeScript 4.0+ tuple parameter labels syntax

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
hyper 2026-03-31 16:57:52 +08:00
parent 4e841be4f0
commit cf55295ce7
3 changed files with 24 additions and 6 deletions

View File

@ -408,12 +408,18 @@ function schemaToTypeString(schema) {
return "boolean"; return "boolean";
case "array": case "array":
if (schema.element.type === "tuple") { if (schema.element.type === "tuple") {
const tupleElements2 = schema.element.elements.map((el) => schemaToTypeString(el.schema)); const tupleElements2 = schema.element.elements.map((el) => {
const typeStr = schemaToTypeString(el.schema);
return el.name ? `${el.name}: ${typeStr}` : typeStr;
});
return `[${tupleElements2.join(", ")}]`; return `[${tupleElements2.join(", ")}]`;
} }
return `${schemaToTypeString(schema.element)}[]`; return `${schemaToTypeString(schema.element)}[]`;
case "tuple": case "tuple":
const tupleElements = schema.elements.map((el) => schemaToTypeString(el.schema)); const tupleElements = schema.elements.map((el) => {
const typeStr = schemaToTypeString(el.schema);
return el.name ? `${el.name}: ${typeStr}` : typeStr;
});
return `[${tupleElements.join(", ")}]`; return `[${tupleElements.join(", ")}]`;
default: default:
return "unknown"; return "unknown";

View File

@ -374,12 +374,18 @@ function schemaToTypeString(schema) {
return "boolean"; return "boolean";
case "array": case "array":
if (schema.element.type === "tuple") { if (schema.element.type === "tuple") {
const tupleElements2 = schema.element.elements.map((el) => schemaToTypeString(el.schema)); const tupleElements2 = schema.element.elements.map((el) => {
const typeStr = schemaToTypeString(el.schema);
return el.name ? `${el.name}: ${typeStr}` : typeStr;
});
return `[${tupleElements2.join(", ")}]`; return `[${tupleElements2.join(", ")}]`;
} }
return `${schemaToTypeString(schema.element)}[]`; return `${schemaToTypeString(schema.element)}[]`;
case "tuple": case "tuple":
const tupleElements = schema.elements.map((el) => schemaToTypeString(el.schema)); const tupleElements = schema.elements.map((el) => {
const typeStr = schemaToTypeString(el.schema);
return el.name ? `${el.name}: ${typeStr}` : typeStr;
});
return `[${tupleElements.join(", ")}]`; return `[${tupleElements.join(", ")}]`;
default: default:
return "unknown"; return "unknown";

View File

@ -40,12 +40,18 @@ function schemaToTypeString(schema: Schema): string {
return 'boolean'; return 'boolean';
case 'array': case 'array':
if (schema.element.type === 'tuple') { if (schema.element.type === 'tuple') {
const tupleElements = schema.element.elements.map((el) => schemaToTypeString(el.schema)); const tupleElements = schema.element.elements.map((el) => {
const typeStr = schemaToTypeString(el.schema);
return el.name ? `${el.name}: ${typeStr}` : typeStr;
});
return `[${tupleElements.join(', ')}]`; return `[${tupleElements.join(', ')}]`;
} }
return `${schemaToTypeString(schema.element)}[]`; return `${schemaToTypeString(schema.element)}[]`;
case 'tuple': case 'tuple':
const tupleElements = schema.elements.map((el) => schemaToTypeString(el.schema)); const tupleElements = schema.elements.map((el) => {
const typeStr = schemaToTypeString(el.schema);
return el.name ? `${el.name}: ${typeStr}` : typeStr;
});
return `[${tupleElements.join(', ')}]`; return `[${tupleElements.join(', ')}]`;
default: default:
return 'unknown'; return 'unknown';