Динамический тип в зависимости от переданных значений объекта

У меня есть функция

interface IargsDef {
    name: string;
    default?: string;
}

function parseArgs(argsDef: IargsDef[], splitedString: string[]) {
        const parsedArgs: parseResults = {
            _: [],
        };
        if (argsDef.length > 0) {
            argsDef.forEach((arg: IargsDef) => {
                if (parsedArgs[arg.name] !== undefined) return;
                const value = splitedString.shift();
                parsedArgs[arg.name] = value || arg.default || " ";
            });
        }
        if (splitedString.length > 0) parsedArgs._ = splitedString;
        return parsedArgs;
    }

Пример возвращаемого значения


const splitedString: string[] = ["some", "args", "test"]
const argsDef: IargsDef[] = [{
    name: "command",
},
{
   name: "test" 
}
]
const result = parseArgs(argsDef, splitedString)  
------------------
result = {
_: ["test"],
command: "some",
test: "args"
}

Она проходит по массиву с именами аргументов и по значению ключа name создает новое свойство в объекте parsedArgs и присваивает ему значение из splitedString и если его нет, то стандартное, либо пустую строку. Если в splitedString еще остались элементы, то все они пристраиваются свойству "_" объекта parsedArgs.

Мой вопрос состоит в том, как правильно сделать интерфейс parseResult, чтобы intellisense корректно с ним работал и было видно какие свойства доступны, сейчас оно работает только со свойством "_".

Сейчас интерфейс выглядит вот так:

interface parseResults extends Record<string, string | string[]> {
    _: string[];
    
}

Я бы забил и не стал с этим париться, но хочется, чтобы было удобнее пользоваться функцией. На английском стаке такой вопрос заминусили и только один ответ в комментариях, который совсем не помог. Возможно из-за моего отвратительного разговорного английского.


Ответы (0 шт):