возьмите следующий код
type PersonKeys = "name" | "age"
type PersonR = Record<PersonKeys, string>
const test = (human: Partial<PersonR>): PersonR => {
return {name: "", age: "", widen: true} // // fails perfect can't widen
}
const yolo = (k: PersonKeys) => {
return test(CreatePair(k, new Date())); // fails perfect, can't take anything but string
}
// Disgusting solution
const CreatePair = <T extends (number | string), A>(key: T, value: A): Record<T, A> => {
return {[key]: value} as any;
}
Проблема проста, я хочу, чтобы все, что возвращает PersonR, не могло расширяться, чтобы иметь возможность принимать свойства не на PersonR.
Однако я также хочу, чтобы все, что требует Partial of PersonR, принимало только VALID partial, что означает {[K as keyof Person]: string}, а не {[K as keyof Person]: Date}
Это кажется невозможным без взлома функции CreatePair.
Можете ли вы заставить оба комментария по-прежнему терпеть неудачу, не используя CreatePair? почему использование объекта вместо CreatePair со значением даты не приводит к сбою?
test({[k]: new Date()});
? - person Titian Cernicova-Dragomir   schedule 20.09.2018