程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了TypeScript 问题,大小写切换返回意外类型大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决TypeScript 问题,大小写切换返回意外类型?

开发过程中遇到TypeScript 问题,大小写切换返回意外类型的问题如何解决?下面主要结合日常开发的经验,给出你关于TypeScript 问题,大小写切换返回意外类型的解决方法建议,希望对你解决TypeScript 问题,大小写切换返回意外类型有所启发或帮助;

谁能给我解释一下(见代码部分的评论)?

playground link

interface Payloadnumber {
  key: "A";
  data: number;
}

interface PayloadString {
  key: "B";
  data: String;
}

interface updateStateAction {
  payload: Payloadnumber | PayloadString;
}

const whatever = (action: updateStateAction): number => {
  const { key } = action.payload;
  switch (key) {
    case "A":
      return action.payload.data; // Why is this String | number and not number? ?
    default:
      return 1;
  }
};

解决方法

问题是解构

const { key } = action.payload;
// or even
const key = action.payload.key;

我们正在 key 中隔离 Payloadnumber | PayloadString

由于我们只查看 key,因此打字稿可以做出的唯一推断是 key"A" 还是 "B"

Typescript 不可能对 action.payload.data 进行推断,因为它不知道您正在尝试通过 key 确定它的类型。

你可以做两件事,要么

const whatever = (action: updateStateAction): number => {
  switch (action.payload.key) {
    case 'A':
      return action.payload.data;
    default:
      return 1;
  }
};

const whatever = (action: updateStateAction): number => {
  const p = action.payload;
  switch (p.key) {
    case 'A':
      return p.data;
    default:
      return 1;
  }
};

您会看到 action.payload.data 现在输入正确。您可以看到,在这两种情况下,我们都引用了整个 payload 类型,而不仅仅是 key 中的 payload

大佬总结

以上是大佬教程为你收集整理的TypeScript 问题,大小写切换返回意外类型全部内容,希望文章能够帮你解决TypeScript 问题,大小写切换返回意外类型所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。