Используя типы, определенные здесь в качестве примера , мы можем создать условный тип, в котором, если поле является обязательным, тип field
будет иметь тип { required : true }
или {}
в противном случае:
[ 110]
Примечание Это будет проверять на необязательность (модификатор ?
), оно не будет проверять на обнуляемость (| null | undefined
) в зависимости от вашего варианта использования, это может или не может быть важным. [1115 ]
Также может представлять интерес этот ответ , который имеет тест для модификатора readonly
. Используя его, вы также можете добавить поле isReadonly
:
type IfEquals =
(() => T extends X ? 1 : 2) extends
(() => T extends Y ? 1 : 2) ? A : B;
type DomainDefinition = {
fields?: {
[K in keyof F]:
({} extends { [P in K]: F[P] } ? {} : { required: true })
& IfEquals<{ [P in K]: F[P] }, { -readonly [P in K]: F[P] }, {}, { isReadonly: true }>
},
methods?: { [K in keyof M]: M[K] & Function },
}
type User = {
id: string,
readonly name?: string
}
function createDomain(o: DomainDefinition) {
return o;
}
export const User = createDomain({
fields: {
id: { required: true },
name: { isReadonly: true },
},
});
Если вы хотите отфильтровать некоторые свойства, например функции, вам придется заменить все вхождения F
на отфильтрованные [ 1111]. Чтобы упростить его, просто определите псевдоним дополнительного типа:
type NonFunctionPropertyNames = { [K in keyof T]: T[K] extends Function ? never : K }[keyof T];
type DomainPropertyHelper = {
[K in keyof F]: ({} extends { [P in K]: F[K] } ? {} : { required: true }) & {} // Intersect with other properties as necessary
};
type DomainDefinition = {
fields?: DomainPropertyHelper>>,
methods?: { [K in keyof M]: M[K] & Function },
}
Вы не можете вставить в столбец идентификационных данных в SQL Server, если "IDENTITY_INSERT" не установлен на "НА". Так как Ваш класс генератора "присвоен", Будьте в спящем режиме, предполагает, что Вы устанавливаете явное значение для "идентификатора" в Java прежде, чем сохранить объект и которые В спящем режиме, может непосредственно вставить значение в базу данных. Вы должны также: