Использовать предполагаемый тип свойства в другом свойстве того же объекта

#typescript

#typescript

Вопрос:

Возможно ли это сделать в TypeScript?

Примечание: любое имя свойства допустимо в props аргументе

 type Values<T extends object> = Pick<T, Exclude<keyof T, 'onStart'>>

declare function animate<T extends {
    onStart?: (values: Values<T>) => void
}>(props: T): void

animate({
    foo: 100,
    onStart(values) {
        // $Expect(values == { foo: number })
    }
})
 

Игровая площадка

Комментарии:

1. Какой тип предполагаемого свойства? Например, вы пытаетесь убедиться, что values у него есть свойство foo типа number ?

2. Да, это то, что говорится в $Expect комментарии

3. Хм, я сомневаюсь, что это возможно. Я знаю, что видел, как говорилось , что компилятор не выводит параметр типа одновременно и не применяет выведенный параметр контекстуально. Не знаю, есть ли официальное сообщение об этом случае.

4. @jcalz Как ни странно, вы можете это сделать, но не с типами функций ( см. Здесь )

5. На самом деле, единственным ограничением являются типы аргументов. Возвращаемый тип работает нормально. ( смотрите здесь )