если у вас есть доступ к интерфейсу / типу конвертера или к какому-либо другому расширению этого типа
или создайте расширенный интерфейс, подобный этому
interface Converter<T> {
p1: any;
p2: any;
}
interface IExtendedConverter<T> extends Converter<T> {
type: T;
}
interface IApi {
state: IExtendedConverter<string>;
water: IExtendedConverter<number>;
}
const write = <K extends keyof IApi>(name: K, value: IApi[K]['type']) => {
return;
};
const str = write('state', '1'); // here value has to be string
const num = write('water', 1); // here value has to be number
РЕДАКТИРОВАТЬ на основе вопроса
одно решение будет определять этот параметр
const extendedConverterState: IExtendedConverter<string> = {
...converter,
type: '',
};
const extendedConverterNumber: IExtendedConverter<number> = {
...converter,
type: 1,
};
const api: IApi = {
state: extendedConverterState,
water: extendedConverterNumber,
};
это решение с некоторой задержкой, так как вы просто создадите это свойство, которое никогда не будет использовано.
Другим решением может быть создание параметра типа как опция
interface IExtendedConverter<T> extends Converter<T> {
type?: T;
}
но этот соулитон установит ваш параметр в функции записи как необязательный (возможно, неопределенный)
ну, может быть, есть лучшее решение для доступа к этому универсальному типу ИДК