发布于 2026-01-06 2 阅读
0

TypeScript 可能会让人困惑

TypeScript 可能会让人困惑

在 Codesphere,我们主要使用 Typescript 进行编码,这不一定是因为它是我们最喜欢的语言,而是因为我们发现它能让我们获得最高的效率。

首先,Typescript 的一些优点可以提高我们的效率:

  • 能够使用同一种语言进行前端和后端编码
  • (大部分)很棒的面向对象 + 类型
  • 异步代码

然而,最近我遇到了两种非常奇怪的行为(我知道,这在 JavaScript Bubble 中很常见),我忍不住想和大家分享一下!

1: ['1', '2', '10'].map(parseInt);

我是在想格式化一些用户输入,将其转换为数字并放入图表中时偶然发现这个功能的。

替代文字

不信?打开浏览器控制台,粘贴以下内容,然后按回车键。

['1', '2', '10'].map(parseInt);

这样做行不通,因为 map 函数parseInt()每次迭代都会传递三个参数。第二个参数 index 被作为基数参数传递给 parseInt 函数。因此,数组中的每个字符串都会使用不同的基数进行解析。'2'例如,第一个字符串被解析为基数 1,结果为 NaN;第二个字符串'10'被解析为基数 2,结果为 3;而'1'第三个字符串由于其索引 0 为假值,因此被解析为默认基数 10。

2:TypeScript 中“readonly”属性的继承

在 Codesphere 的一次代码审查中,我的同事 Roman 提出了将方法设为只读的想法。接下来发生的事情让我们有些困惑。

实际上无法将方法设为只读,但可以创建函数类型的只读属性,效果相同。

有趣的是,不能为同一类的实例再次分配该属性,但可以继承一个类并重写该属性,也可以将该属性分配给子类的实例。

class Roman {
    readonly jonas: () => void = () => console.log("huh?");
}

class Elias extends Roman {
    jonas: () => void = () => console.log("oh no, override works!");
}

const elias = new Elias();
elias.jonas(); // oh no, override works!
elias.jonas = () => console.log("oh no, assignment works too!");
elias.jonas(); // oh no, assignment works too!
Enter fullscreen mode Exit fullscreen mode

今天就到这里啦,希望您喜欢这篇文章!TypeScript 支持是 Codesphere IDE 的核心功能之一。对了,我叫 Saji,我加入 Codesphere 团队是因为我热爱编程,也认同我们改善开发者体验的愿景。

你使用 TypeScript 的经验如何?欢迎分享你在使用 TypeScript 时遇到的困惑和困惑之处!

文章来源:https://dev.to/codesphere/typescript-can-be-confusing-5be4