typescript - 自己的打字稿键
问题描述
我正在尝试创建一种可以使用它自己的键的类型并且似乎找不到解决方案的类型。这是我正在尝试做的简化版本:
type SpecialType = Record<string, (getter: <K extends keyof SpecialType>(key: K) => ReturnType<SpecialType[K]>) => any>
const yo: SpecialType = {
a: get => {
get('b') // ok, should return type string
return 1 // returns number
},
b: get => {
get('a') // ok, should return type number
get('c') // should error
return 'a' // returns string
}
}
我定义的类型实际上并没有按预期工作。我正在寻找将get
每个函数的参数限制为父对象的键,并且理想情况下能够根据它们在中使用的键知道该函数的返回类型get
。
我目前的思路是这样的;
type SpecialType<T extends Record<string, (getter: <K extends keyof T>(key: K) => ReturnType<T[K]>) => any>> = T
但是如果没有用户自己指定泛型(我试图避免),这是行不通的
解决方案
您可以使用getter并利用Javascript 中的工作原理来this
完成类似的事情。当您在对象内定义函数时,this
会自动将范围限定为包含对象,如下所示:
const specialType = {
get a() {
this.b; // string
return 1; // returns number
},
get b(){
this.a; // number
return 'a'; // returns string
},
};
这就是在 ES6 引入 class 关键字之前人们定义类的方式。这是做你想做的吗?
推荐阅读
- python - 是否有关于肘部方法中 k 值的最佳范围的研究?
- sequelize.js - Sequelize CLI:sequelize init:models,这是如何工作的?
- linux - 跟踪 Linux 进程的页表访问
- mysql - 从 phpmyadmin 4.9.2 删除数据库并且它仍然连接
- python - Python WebScraping with Selenium&gChrome
- javascript - req.headers['authorization'] 在 Nodejs JWT(JSON WEB TOKEN)中未定义
- github - Azure DevOps Pipeline 无法读取 github 的用户名
- angular - Angular:数据详细信息页面未随新产品更新
- python-3.x - 带有特殊字符的scapy嗅探
- r - 为什么在 R 中使用 dataEllipse 函数时会出现两个椭圆?