Я боролся с довольно интересной проблемой определения типов. Поскольку я изучаю TS, имейте в виду, что я также ищу объяснение или ссылку на него.
Согласно заголовку, у меня есть функция, определенная как:
function make<ChildObj extends ParentObj, ParentObj, Missingkey extends string>(
parentObj: ParentObj, // Only 1 key is missing to make ChildObj become ParentObj
missingKey: MissingKey,
): ChildObj {
const missingKeyValue = Math.random();
doSomething({ // doSomething expects the first parameter to be of type ChildObj
...childObj,
[missingKey]: missingKeyValue
});
}
Пример использования:
type ParentObj = {a: any};
type ChildObj = {a: any, b: any};
make<ParentObj, ChildObj, 'x'>({a: 0}, 'x') // Invalid because ParentObj & {'x': any} is not ChildObj
make<ParentObj, ChildObj, 'b'>({a: 0}, 'b') // Valid
Короче говоря, мне нужно ограничить missingKey
1 keyof
ChildObj
, которого нет в ParentObj
.
Заранее благодарим за любую помощь и объяснения!