type A = {
type: "message";
name: string;
}
type B = {
type: "notification";
age: number;
}
type C = A | B;
function handler<T extends C["type"]>(type: T, body: ...) {}
handler("message", {
name: ""
})
Как сделать так, чтобы тайпскрипт вывел name , если передал "message"? Я никак не могу сделать что-то типа C[T] , но оно и понятно, так как это никакой не объект с полями типа T
Можно так
type C = {
message: A;
notification: B;
}
function handler<T extends keyof C>(type: T, body: C[T]) {}
Но не катит, так как у меня есть еще вложенные поля, которые ровно по такому же принципу мне надо разделять, типа:
type A = {
type: "message";
subtype: "chat" | "admin-panel"
}
type B = {
type: "notification";
subtype: "text" | "file"
}