Неявный вывод TypeScript через свойство в конструкторе Object не работает - PullRequest
0 голосов
/ 18 апреля 2020

Как описано в комментариях в коде, явное указание типа c для родового c в классе работает и возвращает правильный тип при вызове функции-получателя.

Я бы хотел это работает с помощью неявного вывода, а также. В этом случае он правильно выводит ключи обобщенного c, но все его значения являются типами unknown.

. Есть ли способ заставить неявный вывод работать так же, как явные?

Вот код на игровой площадке TypeScript

export interface TextProperties {
    'settings.xyzType': number;
    isInterfaceOn: boolean;
}

export const propertyIndexToStructuredObjMap: { [index in keyof TextProperties]: number } = {
    'settings.xyzType': 0,
    isInterfaceOn: 2
}

export class GenericInterface<GenericProperties> {
    constructor(private propertyIndexToStructureObjMap: { [index in keyof GenericProperties]: number }) {}

    public getProperties() {
        //{} is too keep this snippet short. Real world code would return a proper object.
        return {} as GenericProperties;
    }
}

//Explicitely using TextProperties for GenericProperties works
const explicit = new GenericInterface<TextProperties>(propertyIndexToStructuredObjMap);
const expliitProps = explicit.getProperties(); //has type TextProperties

//Implicitely infering GenericProperties through the object provided in the constructor does not work
const implicit = new GenericInterface(propertyIndexToStructuredObjMap);
const implicitProps = implicit.getProperties(); //has type {'settings.xyzType': unknown, isInterfaceOn: unknown}
...