为什么 Typescript 无法推断出这些相关类型?

问题描述 投票:0回答:1

有以下代码:

const foo = (flag: boolean) => {
  if (flag) {
    return {
       success: true,
       data: {
         name: "John",
         age: 40
       }
    }
  }

  return {
    success: false,
    data: null
  }
}    

const result = foo(true);

if (result.success) {
   console.log(result.data.name); // TS error: 'result.data' is possibly 'null'
}

如果

data
设置为
flag
,为什么打字稿不能推断
true
始终存在?

我知道我可以通过定义函数的返回类型来解决这个问题,但如果 TS 自动推断它会很好。

javascript typescript type-inference
1个回答
0
投票

也许此代码修复:

interface ReturnSuccess {
  success: true
  data: { name: string; age: number }
}
interface ReturnFailure {
  success: false
  data: null
}
const foo = <Flag extends boolean, Return extends Flag extends true ? ReturnSuccess : ReturnFailure>(flag: Flag): Return {
  if (flag) {
    return {
       success: true,
       data: {
         name: "John",
         age: 40
       }
    } as Return 
  }

  return {
    success: false,
    data: null
  } as Return 
}    

© www.soinside.com 2019 - 2024. All rights reserved.