【发布时间】:2021-09-23 15:45:14
【问题描述】:
我正在使用 Typescript Generics 构建 API 抽象,但我正在努力寻找一种优雅的语法来让事情按我的意愿工作。这是我设法开始工作的虚拟版本。关于如何简化事情的任何想法?
interface ExampleInterface {
LevelOne: {
LevelTwo: {
keyOne: string;
keyTwo: number;
keyThree: boolean;
}
}
}
class ExampleClassOne <T1, K1 extends keyof T1> {
requestMethod<K2 = 'LevelTwo'> (): Promise<K2 extends keyof T1[K1] ? T1[K1][K2] : any> {
return new Promise (async (resolve, reject) => {
try {
const requestResponse = await axios({
url: `https://someurl.com/api/`,
method: 'GET'
})
resolve(requestResponse.data)
} catch (err) {
reject(err.response.status);
}
})
}
}
class ExampleClassTwo {
methodObj = {
levelOne: new ExampleClassOne<ExampleInterface, 'LevelOne'>()
}
}
尤其是这段代码让我很困扰:
Promise<K2 extends keyof T1[K1] ? T1[K1][K2] : any>
我希望它看起来更像这样:
Promise<T1[K1][K2]>
我仍在努力了解 Typescript,并希望能对这里上演的魔法进行某种解释。为什么二级嵌套需要这个条件类型守卫?
非常感谢。
【问题讨论】:
标签: typescript generics