

























这是一个创建于 583 天前的主题,其中的信息可能已经有所发展或是发生改变。
以下代码中 value 只能推断出是 1 | 2 | 3 。
想问下大佬们,TypeSciprt 目前只不支持在 if(k === 'a') 时推断出 value 为 1 。
或者有没有什么搜索的关键词。查了半天没找到怎么更一步收窄这个类型。
const map = {
a: 1,
b: 2,
c: 3,
} as const;
type Map = typeof map;
function fn<K extends keyof Map>(k: K, value: Map[K]) {
if (k === 'a') {
console.log(value); //value: 1 | 2 | 3
}
if (k === 'b') {
console.log(value);
}
if (k === 'c') {
console.log(value);
}
}
1 renmu 2024 年 11 月 8 日 via Android试试 switch ? |
2 powerfulyang 2024 年 11 月 8 日const map = { type Map = typeof map; type Params = { [K in keyof Map]: { k: K; value: Map[K] } }[keyof Map]; function fn(params: Params) { if (k === 'a') { fn({k: 'a', value: 1}); 感觉现在还没那么强大,换个写法倒是可以? |
3 RIckV2 2024 年 11 月 8 日type If<C, T, F> = C extends true ? T : F type MyPick<T, K extends keyof T> = { type A = If<k === 'a', MyPick<Map,'1'>,MyPick<Map> > 类似的逻辑,仅供参考 |
4 lisxour 2024 年 11 月 9 日换 2 楼的写法可以的,这个理论上是能推出来的,靠 ts 更新去支持了 |
6 kashao 2024 年 11 月 14 日学习了 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。