Javascript/Typescript class 数字与字符串的最佳实践问题

Best Practice question for Javascript/Typescript class number vs. string

我是新手。我没有意识到,在我的 Typescript/React 解决方案中,即使我将 属性 定义为数字并且我将输入类型设为“数字”,但无论何时将该状态值放入输入字段它会将其更改为字符串(除非您采取任何措施来处理它)。

在我的例子中,我最初从 xml soap 调用中插入值。此项目的内部 html 是“100.00”。我将此项目 (BaseFare) 的 class 声明为数字而不是字符串,并且状态最初设置为 100.00(作为数字)。它呈现在表单上,​​在我进行更改的那一刻,它变回字符串“199.00”。

我在部分代码中对 BaseFare 进行了计算,因此我必须对此函数执行 parseInt 以使其处理现在的字符串。

我的问题是... 您在什么时候决定将其定义为字符串还是数字。做 parseInt 很好。但我不喜欢 属性 最初是一个数字然后变为 sting 的事实。 然后,因为我认为对于其他查看代码的人来说,他们可能认为 属性 从数字变为字符串很奇怪,如果我要将其定义为数字,那么我的 handleChange函数绝对应该将 setState 设置为数字,以便始终将值视为数字。

只是想知道一直这样做的人的意见...

处理从输入字段更新值并将其记录为数字的最佳最现代方法是什么。我已经将 valueAsNumber 视为处理此问题的常用方法...

handleChange(e) {
    this.setState({
        [e.target.name]: e.target.valueAsNumber || e.target.value
    });
}

看来,如果它是一个真实的数字并且我需要对其进行计算,那么“正确”的方法是将其定义为一个数字并将其保留为一个数字。是吗?

DOM 在内部将值存储为字符串,显示给用户的是字符串。

因此,您可以选择如何处理它。在 <input type="number" /> 上,您发现 valueAsNumber 可用于转换,或者您可以自己进行转换。

我认为唯一重要的是在 EventHandler 中处理转换。

另外,为了简单起见,您可以使用表单库,例如react-hook-form that will take care of that,这样您就不必处理那种细节。 有了它,您需要做的就是:

const MyForm : FC = () =>
  const { register, watch } = useForm<{thatInput: number}>();

  const { thatInput } = watch();

  return (
    <...>
      <input type="number" name="thatInput" ref={register({valueAsNumber: true})} />
      <div>the value is: {thatInput}</div>
    </...>
  );
}

TypeScript 中的 number 类型支持浮点数

let inputValue: number = 3.14
console.log(inputValue)   //this is valid code

那么我猜你的问题是 input type="number"

数字类型有一个 step 值控制哪些数字有效(连同 maxmin),默认为 1。这个值也被实现用于步进按钮(即向上按步进)。

只需将此值更改为合适的值即可。对于金钱,大概需要小数点后两位:

<input type="number" step="0.01">

<input type="number" step="any">