Я сталкиваюсь со сценарием, когда ответ на HTTP-вызов зависит от региона. Я указал возвращаемый тип объекта. Итак, если я объявлю предположительные 4 типа и использую их объединение в качестве типа-оболочки.
Проблема возникает, так как есть поля, которые не являются общими для всего. Это решение состоит в том, чтобы сделать эти поля необязательными. Для меня сделать поле необязательным означает, что в нем нет необходимости, что неверно в данном случае. Как это сделать, чтобы ошибка Tslint исчезла.
Пожалуйста, скажите мне, если вы не понимаете мой вопрос
РЕДАКТИРОВАТЬ:-
function mapAddress(address: AddressRegionXX | AddressRegionYY,region:string): AddressWithIdXX | AddressWithIdXX {
let addressId = address.id ? address.id : "XX";
let addressType = addressId == "XX" ? "subbed" : "unsubbed";
if(region == "XX"){
return {
firstName: address.first_name || null,
lastName: address.last_name || null,
street1: address.addr_1 || null,
street2: address.addr_2 || null,
city: address.city || null,
state: address.state || null,
postalCode: address.zip_code || null,
phone: address.phone_number || null,
addressId: addressId,
addressType: addressType
};
if(region == "XX"){
return {
fName: address.f_name || null,
lName: address.l_name || null,
address: address.addr_1 || null,
roomNo: address.addr_2 || null,
district: address.district|| null,
state: address.state || null,
pinCode: address.zip_code || null,
phoneNumber: address.phone_number || null,
addressId: addressId,
addressType: addressType
};
}
}
Это контекст, в котором я должен использовать тип Union. Здесь ответ в зависимости от типа адреса каждого региона будет меняться, есть длинный список, который нецелесообразно включать здесь. Как я показал здесь, имена полей различаются для каждого региона и для некоторых дополнительных полей. Итак, каков элегантный способ справиться с этой ситуацией, правильно использовать условные типы. Есть ли альтернатива типу union. Как и в ened, будет по крайней мере 5-6 типов адресов и шансы на то, что в будущем их станет больше.
In layman terms
is there any miraculous way in which :D
We write something Like
type correctTypeAddress<T> =
T extends Address? AddressXX :
T extends Address? AddressYY :
mapAddress(адрес: AddressRegion,region:string):correctTypeAddress
Ниже приведен пример того, что я имею дело со всеми типами, не имеющими одинаковых свойств. Итак, как работать с неоднородными отображениями типов. Есть ли альтернатива использованию типа объединения, когда
Способ воссоздания проблемы
type typeA = {
prop1:string;
prop2:string;
}
type typeB = {
prop1: string;
prop3: string;
}
type typeC = {
prop4: string;
prop5: string;
}
type mappedType = typeA | typeB | typeC;
const a = (b): mappedType => {
return {
prop1:"1",
prop5:"3"
}
}
EDIT:- Применение условных типов, но использование универсальных приводит к другой ошибке lint как Property 'prop1' does not exist on type 'T'
type typeIA = {
prop1: string;
prop2: string;
}
type typeIB = {
prop1: string;
prop3: string;
}
type typeIC = {
prop4: string;
prop5: string;
}
type typeOA = {
prop1: string;
prop2: string;
}
type typeOB = {
prop1: string;
prop3: string;
}
type typeOC = {
prop4: string;
prop5: string;
}
// type mappedType = typeA | typeB | typeC;
const a = <T extends typeIA | typeIB | typeIC>(_b: T): T extends typeIA ? typeOA : never | T extends typeIB ? typeOB : never | T extends typeIC ? typeOC : never=> {
if (_b.prop1 == "1"){
return {
prop1: "1",
prop3: "3"
} as T extends typeIA ? typeOA : never | T extends typeIB ? typeOB : never | T extends typeIC ? typeOC : never
}else{
return {
prop1: "1",
prop2: "2"
} as T extends typeIA ? typeOA : never | T extends typeIB ? typeOB : never | T extends typeIC ? typeOC : never
}
}
const c = a({prop1:"1",prop2:"2"});
const d = a({ prop1: "1", prop3: "2" });
const e = a({ prop4: "1", prop5: "2" });
AddressRegion
и т. д. Не могли бы вы это сделать? В идеале вы должны предоставить нам некоторый код, который кто-то может добавить в IDE как есть (например, Playground) и начать вносить изменения и предложения. Единственными ошибками должны быть те, которые имеют отношение к проблеме. Это полные и поддающиеся проверке части минимально воспроизводимого примера. Удачи! - person jcalz   schedule 06.05.2019