Я пытаюсь добавить новое свойство в свой awesome.model.ts
файл.
Исходный контент выглядит так:
import { TagInterface, TagUIFieldsInterface } from './tag.interface';
export class Tag implements TagInterface {
readonly api_endpoint = '/tag';
id: ID;
name: string;
fields: FieldContainerInterface<TagUIFieldsInterface> = {
// ...
};
init(data?: any): TagInterface {
// ...
}
}
Я хочу добавить новое свойство color_code: string;
после строки свойства name
. Чтобы выглядеть так:
import { TagInterface, TagUIFieldsInterface } from './tag.interface';
export class Tag implements TagInterface {
readonly api_endpoint = '/tag';
id: ID;
name: string;
color_code: string;
fields: FieldContainerInterface<TagUIFieldsInterface> = {
// ...
};
init(data?: any): TagInterface {
// ...
}
}
В моей функции правил Schematics я пробовал это, но я застрял:
export function model(_options: Schema, _fields?: Field[]): Rule {
return (tree: Tree, _context: SchematicContext) => {
// ...
if (tree.exists(file)) {
// read the file content and convert it to ts.Node[]
const text = tree.read(file) ?? '';
let sourceText = text.toString('utf-8');
const sourceFile = ts.createSourceFile(file, sourceText, ts.ScriptTarget.Latest, true);
const nodes = getSourceNodes(sourceFile);
updateModelFields(file, nodes, _options);
return;
}
}
А вот функция updateModelFields()
:
export function updateModelFields(file: string, nodes: ts.Node[], options: Schema) {
// find field definitions
let propertyNodes: ts.Node[] = nodes.filter(n => n.kind === ts.SyntaxKind.PropertyDeclaration) || [];
// create new property declaration
const propertyDeclaration = ts.factory.createPropertyDeclaration(
undefined,
undefined,
'color_code',
undefined,
ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
undefined
);
// add propertyDeclaration to nodes
// ??
}
Я пробовал несколько способов добавить объявление нового свойства, но всегда терпел неудачу.
Когда я попытался добавить с помощью функции splice()
, он сказал:
Error: Debug Failure. False expression: Node must have a real position for this operation
Любая идея или лучшая практика?