【问题标题】:Best practice for non-trivial data structures in typescript打字稿中非平凡数据结构的最佳实践
【发布时间】:2020-08-19 00:55:15
【问题描述】:

我刚刚开始使用typescript,我发现并没有那么多内置数据结构(双向链表、有序字典、队列、二叉树.. .).

我发现像 mnemonisttypescript-collections 这样的 monorepos 包含经过测试的数据结构。第一个有更多的追随者,第二个归typescript deep dive的作者所有,强烈推荐阅读。

但是,两者都尚未获得关注并显示出长期维护。

此外,typescript 的roadmap 似乎并没有在可见的未来合并这些 DS。

目前是否有任何与 typescript 中重要数据结构的使用和维护有关的推荐最佳实践?

(我正在了解事情的发展方向,但我觉得在这里提问是有好处的)

【问题讨论】:

    标签: typescript performance data-structures


    【解决方案1】:

    TypeScript 只是打了激素的 JavaScript。唯一要做的就是

    1. 允许您使用类型使您的代码更可预测并发现错误
    2. 将一些现代 JS 功能(如 ?.??= 运算符)转换为任何浏览器都可以理解的旧 JavaScript,基本上和 babel 一样

    TypeScript 不提供 JavaScript 中不存在的任何对象。 Map 存在于 JS 中 - Map 存在于 TS 中,Set 存在于 JS 中 - Set 存在于 TS 中,但没有 TS 有但 JS 没有的对象。而且它可能永远不会包含这样的东西,因为添加新功能不是这个项目的目标,它的目标是添加 types 以减少编写代码时的错误。所有 TypeScript 类型注释在编译后都会被删除,因为浏览器无法理解它们。

    好吧,公平地说,TypeScript 实际上可以在你的项目中添加一些代码,即让你使用诸如async 函数、for...of 循环等东西的再生器运行时,但这只是为了使现代 JS 功能在不理解它们的浏览器中工作,这不是为了提供任何新功能。

    如果你想要一个 JS 中不存在的数据结构,例如 LinkedListQueue,你要么必须自己编写它们并为它们键入定义,要么安装一个包,如 mnemonist 你提及。后者完全没问题,你可以接受。 mnemonist 甚至提供类型定义(.d.ts 文件),因此您不必担心它们。如果一个包没有开箱即用的类型定义(如express),您通常会从DefinitelyTyped(如@types/express)安装类型定义。如果没有为你想要的包编写类型定义,你将不得不自己做。但这对你来说不是问题,你可以安装 mnemonist 并继续使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-21
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      相关资源
      最近更新 更多