Ввод const из параметра rest в деструктурированном объекте
Я пытаюсь явно ввести const, который создается с использованием параметра rest в деструктурированном объекте. Я вижу, что машинописный текст может сделать вывод, что он будет иметь все свойства типа исходного объекта, за исключением любых свойств, для которых я создаю отдельные константы. Но у меня есть предопределенный тип, который я специально хочу использовать для своей новой константы. Это возможно?
interface Animal {
name: string,
species: string,
legs: number,
tail: boolean,
alive: boolean,
}
// say we know an animal is alive and therefore want a type without this property
// (yes, we could extend Animal with alive: true, but this a contrived example, go with it)
type LivingAnimal = Omit<Animal, 'alive'>
// dave is an Animal, but we want a LivingAnimal type from him, which omits the 'alive' property
const dave: Animal = {
name: 'Dave',
species: 'lizard',
legs: 4,
tail: true,
alive: true,
}
// with object destructuring, I can infer that alive is a boolean and daveAnimal is the same type as LivingAnimal (ie has all the same props as Animal except alive)
// But what I actually *want* to achieve is to type daveAnimal specifically as LivingAnimal
const {alive, ...daveAnimal} = dave;
// but when I try and do this, it fails
const {alive2, ...daveAnimal2}: {alive2: string, ...daveAnimal2: LivingAnimal} = dave;
// so is there a way of specifying a predefined type for the animal const, created with a rest param in a destructured object?
Вот код на игровой площадке машинописного текста.
Я сделал несколько поисковых запросов и прочитал статьи, подобные этой, и другие вопросы SO, подобные этой, но они не совсем охватывают мое использование остальных параметров или, по крайней мере, не так, как я понял.
Надеюсь, я объяснил, чего я пытаюсь достичь адекватно. Это не так уж важно - на практике я могу работать с тем, что у меня уже есть, это больше для аккуратности и развития моего понимания. Спасибо за любую мудрость, которой вы можете поделиться.