#typescript #graphql #nexus-prisma #prisma2
#typescript #graphql #nexus-prisma #prisma2
Вопрос:
type GraphQLInput = {
email: string;
age?: null | number | undefined;
height?: null | number | undefined;
}
type PrismaPerson = {
email: string;
age: number | undefined;
height: null | number;
}
let input: GraphQLInput = {
email: "some@email.com",
height: null
}
let dbData: PrismaPerson = input
Мне нужно назначить input
dbData
, но в свойстве есть несовместимый тип age
.
let dbData: PrismaPerson
Type 'GraphQLInput' is not assignable to type 'PrismaPerson'.
Types of property 'age' are incompatible.
Type 'number | null | undefined' is not assignable to type 'number | undefined'.
Type 'null' is not assignable to type 'number | undefined'.
Я пытаюсь очистить все null
значения с undefined
помощью, но я не знаю, как изменить это только в случае не назначаемых типов.
function cleanNullToUndefined(obj: any): any {
if (obj === null) {
return undefined;
}
if (typeof obj !== 'object') {
return obj;
}
return Object.keys(obj).reduce((result, key) => ({
...result,
[key]: cleanNullToUndefined(obj[key])
}), {});
}
let dbData: PrismaPerson = cleanNullToUndefined(input)
console.log(dbData)
// { email: 'some@email.com', height: undefined }
Мой ожидаемый { email: 'some@email.com', height: null }
результат вместо { email: 'some@email.com', height: undefined }
Есть предложения? Спасибо.
Комментарии:
1.
let dbData: PrismaPerson = input as PrismaPerson
2.
input as PrismaPerson
решает мою проблему. Спасибо!
Ответ №1:
Используйте это, но если вы хотите заменить все значение объекта, распространите его и используйте removeNull(value)
с lodash
function removeNull<T>(data: T | null | undefined) {
if (isNull(data)) return undefined;
return data
}
без lodash
function removeNull<T>(data: T | null | undefined) {
if (typeof data === null) return undefined;
return data
}