Введите переменную как тип и тип возвращаемого значения - PullRequest
0 голосов
/ 27 апреля 2020

В поисках обходного пути для # 38115 , чтобы иметь возможность сообщать компилятору о добавленных свойствах stati c и экземплярах с помощью вызовов defineProperty () или декораторов, и придумали следующий код. Однако мне не нравится идея передачи второго параметра TType. Есть ли способ, как работать с типом экземпляра и самим типом из одного параметра в определении типа?

type Props = {
    p1: number
    p2: number
}
type StaticProps = {
    s: number
}
type ExtraPropType<T, TType> = (new (...args: any[]) => T & Props) & TType & StaticProps;

class BaseClass {}

const ExtendedClass = BaseClass as ExtraPropType<BaseClass, typeof BaseClass>;
ExtendedClass.s;    // ok

const extendedInst = new ExtendedClass();
extendedInst.p1;    // ok
extendedInst.p2;    // ok

Playground Link

Я, очевидно, открыть для другого решения предложения для TS, не распознающие свойства, добавленные с помощью Object.defineProperty() звонки # 38115 .

Мне также было любопытно, почему вы не можете использовать Типы утилит для дженерики.

...