Есть набор классов.
class TimeoutTextValidator {
public static type = 'timeout-text' as const
public schema = {timeout: 1}
}
class ImageValidator {
public static type = 'image' as const
public schema = {src: ''}
}
У всех есть статическое уникальное поле
type
.
Хочу написать функцию, которая бы по переданному типу возвращала нужный класс:
export function getValidatorByType(type) {
switch (type) {
case 'timeout-text':
return TimeoutTextValidator
case 'image':
return ImageValidator
default:
return assertUnreachable(type)
}
}
function assertUnreachable(_: never): never {
throw new Error("Didn't expect to get here");
}
Проблема в типах. Не могу понять, как заставить ТС корректно выводить возвращаемый тип в зависимости от переданного аргумента.
Мои попытки в playground