У меня есть интерфейс, который я использую для определения формы схемы документа No SQL. Он содержит строки, массивы, вложенные объекты и т. Д. c. Например, у меня есть что-то вроде этого:
interface IStudentSchema {
name: string;
age: string;
foo: {
a: number;
b: [number, number];
c: string;
}
}
Я хочу создать другой интерфейс, который поддерживает ту же форму, но тип каждого значения должен быть заменен определенным интерфейсом (кроме случаев, когда тип является объектом ), Например, я хочу что-то вроде этого ниже. Обратите внимание, что он также поддерживает исходный тип и использует его как обобщенный c.
interface IStudentSchemaFieldInfo {
name: ISchemaField<string>;
age: ISchemaField<string>;
foo: {
a: ISchemaField<number>;
b: ISchemaField<[number, number]>;
c: ISchemaField<string>;
}
}
. Есть ли способ сделать это, чтобы я получил предупреждение во время компиляции если я изменю оригинальный интерфейс схемы? До сих пор мне приходилось держать их в синхронизированном состоянии c.
. Я почти могу сделать это, вложенные объекты не используются с помощью Record<keyof IStudentSchema, ISchemaField>
, но это также не дает обобщений, которые должны быть указаны для ISchemaField
интерфейс. Есть идеи?