typescript - 有没有办法在条件打字稿中使用扩展字符串进行推理?
问题描述
我正在尝试提取通用字符串文字类型,但打字稿推断仅返回类型字符串。
因此,从技术上讲,一旦将字符串文字类型传递给函数,我们就不能再提取它了。
type Key<T extends string> = { key: T };
declare function getKey<T extends string>(key: T): Key<T>;
let someKey = getKey('check');
declare function updateWithKey<T, K extends string>(key: T): T extends Key<K> ? K : never;
let someUpdatedKey = updateWithKey(someKey); // Shouldn't be 'check'?
解决方案
在updateWithKey
,K
不会出现在编译器可以自动推断的位置,因此它被认为是允许的最通用类型,即string
.
但是条件类型有特殊的语法告诉编译器你想要推断出实际类型:
type Key<T extends string> = { key: T };
declare function getKey<T extends string>(key: T): Key<T>;
let someKey = getKey('check');
declare function updateWithKey<T>(key: T): T extends Key<infer K> ? K : never;
let someUpdatedKey = updateWithKey(someKey); // let someUpdatedKey: "check"
推荐阅读
- amazon-web-services - 将文件压缩到 aws s3 eroor
- raster - 将栅格地图合并到 CSV(带值)以创建(地理)栅格地图
- mysql - 如何将空 DateTime 对象作为参数传递给 MySQL 数据库?
- python - 如何在 Selenium/Firefox 中以私有模式访问 cookie?
- ios - 连接核心蓝牙或经典蓝牙设备是否需要 CoreLocation 框架
- django - 为什么 Django API Get 工作但 Post 不工作?
- xml - 如何在java中读取xep文件数据
- excel - 如何将 worksheetfunction.large 与数组一起使用?
- javascript - 块的响应金字塔对齐
- ios - 如何将通用协议作为函数参数传递