Как описано в комментариях в коде, явное указание типа 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}