refactor: avoid readonly in nested types

This commit is contained in:
2026-04-17 14:53:49 +08:00
parent 075045223f
commit c8f0d6b0de
3 changed files with 15 additions and 16 deletions
+7 -7
View File
@@ -510,29 +510,29 @@ function schemaToTypeString(schema: Schema, resourceNames?: Map<string, string>)
case 'reference': {
const typeName = resourceNames?.get(schema.tableName) ||
schema.tableName.charAt(0).toUpperCase() + schema.tableName.slice(1);
const baseType = schema.isArray ? `readonly ${typeName}[]` : typeName;
const baseType = schema.isArray ? `${typeName}[]` : typeName;
return schema.isOptional ? `${baseType} | null` : baseType;
}
case 'array':
if (schema.element.type === 'tuple') {
const tupleElements = schema.element.elements.map((el) => {
const typeStr = schemaToTypeString(el.schema, resourceNames);
return el.name ? `readonly ${el.name}: ${typeStr}` : typeStr;
return el.name ? `${el.name}: ${typeStr}` : typeStr;
});
return `readonly [${tupleElements.join(', ')}]`;
return `[${tupleElements.join(', ')}]`;
}
// Wrap union types in parentheses to maintain correct precedence
const elementType = schemaToTypeString(schema.element, resourceNames);
if (schema.element.type === 'union') {
return `readonly (${elementType})[]`;
return `(${elementType})[]`;
}
return `readonly ${elementType}[]`;
return `${elementType}[]`;
case 'tuple':
const tupleElements = schema.elements.map((el) => {
const typeStr = schemaToTypeString(el.schema, resourceNames);
return el.name ? `readonly ${el.name}: ${typeStr}` : typeStr;
return el.name ? `${el.name}: ${typeStr}` : typeStr;
});
return `readonly [${tupleElements.join(', ')}]`;
return `[${tupleElements.join(', ')}]`;
default:
return 'unknown';
}