以下代码中 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);
  }
}
举报· 58 次点击
登录 注册 站外分享
3 条回复  
RIckV2 小成 2024-11-8 16:47:46
type If = C extends true ? T : F type MyPick = { [P in K]:T[P] } type A = If,MyPick > 类似的逻辑,仅供参考
powerfulyang 小成 2024-11-8 16:44:10
const map = { a: 1, b: 2, c: 3, } as const; type Map = typeof map; type Params = { [K in keyof Map]: { k: K; value: Map[K] } }[keyof Map]; function fn(params: Params) { const {k, value} = params; if (k === 'a') { console.log(value); // value: 1 } else if (k === 'b') { console.log(value); // value: 2 } else if (k === 'c') { console.log(value); // value: 3 } } fn({k: 'a', value: 1}); fn({k: 'b', value: 2}); fn({k: 'c', value: 3}); 感觉现在还没那么强大,换个写法倒是可以?
renmu 该用户已被删除 2024-11-8 16:29:17
提示: 作者被禁止或删除 内容自动屏蔽
返回顶部