У меня есть следующая функция:
function doSomething(param1: string, param2: string) {
return param1 + param2;
}
также у меня есть тип на основе json со структурой, похожей на эту:
a1: {
b1: 'something1',
b2: 'something2',
b3: 'something3'
},
a2: {
c1: 'something4',
c2: 'something5'
}
...etc
Я хочу, чтобы n-й аргумент упомянутой функции был литералом n-х глубоких элементов, поэтому, если первый аргумент 'a1'
, второй должен быть 'b1' | 'b2' | 'b3'
, а если первый аргумент 'a2'
, второй должен быть 'c1' | 'c2'
.
Для первого аргумента я сделал простой тип keyof typeof data
, который прекрасно работает:
// data is imported json
type FirstArg = keyof typeof data;
На секунду я попробовал общий тип, подобный этому, но безуспешно:
type SecondArg<T extends FirstArg> = keyof typeof data[T];
Есть ли шанс сделать это?