Typescript 中的类型推断与显式类型声明

2023-11-21

我遇到过几个不同的代码实例,其中变量使用显式类型声明,即使推断的类型很明显:

例子:loading: boolean = false or name: string = "John" or count: number = 0 etc.

TSLint 更喜欢推断类型而不是显式类型,所以我想知道这只是一个风格问题吗?这些显式类型在运行时是否重要?


今天的大多数 javascript 社区可能会支持推理,因为类型推理在某种程度上更容易阅读(即更少的字母),但易于阅读不仅仅是更少的阅读。较少的字母对于程序简单性来说是一个不精确的衡量标准,请考虑:

I hp I mk m slf clr vs I hope I make myself clear

保持开放的态度,尝试这两种方法,才能形成强烈的意见。但要保持灵活性,不要让你的意见妨碍你。

请记住

当我没有做足够的研究时,我的观点就是我的观点

如果您了解一项决定相对于另一项决定的后果,那么您不需要意见,您只需选择一个更可取的选项即可。在这种情况下,您可以将自己从决策过程中解放出来,让常识或逻辑来决定您编写的代码的实际形状。它可能会让你在以后的某个时候免于通过说“我是一名艺术家,我这样看待事物”来为自己辩护。

这种思路清楚地表明了为什么在大多数情况下支持团队的决策是一个好主意。

拖延并等待运行时出现错误是个坏主意,因为你的程序没有理由实际上因异常而在痛苦中死亡。在提交和部署代码之前识别错误要快得多,成本也要低得多,因为在创建票证、规划票证、调查或共享知识以及修复票证方面,需要团队投入更多资源来进行上下文切换。同样,从业务角度来看,不犯错误更便宜,因为每个错误都可以用收入损失来衡量,所以考虑运行时检查作为一种选择的赌博有什么意义呢?只要确保您的类型精确且广泛即可。

这就是我个人倾向于更喜欢显式类型的原因。我的优点和缺点清单告诉我,类型不是内衣,所以没有必要隐藏它们。静态类型系统对齐正式的数学证明,证明您的程序是正确的。它的存在是有原因的——支持你的类型系统,它也会支持你作为回报。不要偷懒地用类型来修饰变量。即使类型声明看似被省略,提供类型名仍然是一个好主意。

因类型系统的缺乏或不完善而给公司和项目造成数十亿损失的情况屡见不鲜。

即使您的编译器检查不够严格(即数字并不总是您可能期望的数字,考虑以下内容),眼前有一个类型名称可以帮助您再次思考并避免犯错误案件:

const x: Miles = 3;
const y: Kilometers = 5;
...
const result = x + y; // Result type is obviously unknown so the operation shouldn't be implicitly allowed

如果您的类型变得太大或太复杂而无法每次都编写,则暗示您是时候对此采取措施了。

但谁知道我可能是错的,就像任何人一样......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typescript 中的类型推断与显式类型声明 的相关文章

随机推荐

  • 使用元组作为参数列表调用方法[重复]

    这个问题在这里已经有答案了 我想知道最好的方法是什么 val foo Some a val bar Some 2 def baz a String b Int if b 2 0 Some a b else None x zip y flat
  • 如何在 Rust 中使用参数重载或可选参数?

    我正在尝试为二叉树编写一个打印函数 这是迄今为止我所拥有的 impl TreeNode fn print self self print 0 fn print self level u8 for i in range 0 level pri
  • 将每个字典值转换为 utf-8(字典理解?)

    我有一本字典 我想将每个值转换为 utf 8 这可行 但是有没有 更Pythonic 的方法 for key in row keys row key unicode row key encode utf 8 对于我可以做的清单 unicod
  • jquery 获取选中复选框

    我正在尝试获取复选框列表和已检查的计数 我有这个 var obj this closest li find checkbox var childCount obj size var checkedCount obj checked leng
  • 数据库中所有表的列表

    如何使用查询获取 SQL Server 数据库中所有表的列表 我的目的是在网页上动态显示它 Try SELECT name from sys tables 这应该会给你你想要的 然后 您需要从网页调用它以按所需格式显示 您可能想查看 如何使
  • BASH 不以防万一

    我正在尝试找出一种合理的方法来在案例中执行 NOT 子句 我这样做的原因是为了 遇到情况时进行转码 也就是说 如果我击中了 avi 没有理由再次将其转为 avi 我可以 只需将其移开 这就是我的案例底部的范围 should做 无论如何 我有
  • HttpWebRequest 非常慢!

    我正在使用开源库连接到我的网络服务器 我担心网络服务器运行速度极慢 然后我尝试在 Ruby 中进行简单的测试 得到了这些结果 Ruby 程序 10 个 HTTP 需要 2 11 秒 获取 Ruby 程序 100 个 HTTP 需要 18 1
  • 在 azure cdn 上托管字体 - CORS 支持

    我无法在 IE 或 Firefox 中通过 azure cdn 公开 azure blob 存储托管字体 我相信这是因为 font face 跨域问题 CORS 正常的解决方案是添加 Access Control Allow Origin
  • 我是否需要为 CDC 设备编写自己的主机端 USB 驱动程序

    这可能不被认为与编程直接相关 但我不知道还能问哪里 我尝试过浏览各种网站 但到目前为止 谷歌还不是我的朋友 我无法确定是否需要为我正在开发的设备可能连接的各种 windows linux mac 平台编写自己的设备驱动程序 或者该功能是否由
  • 如何使用 PHP 以编程方式构建 APR1-MD5

    很像这个问题我想从 PHP 生成 htpasswd 文件条目 然而 正如原始答案中提到的 答案没有显示如何实现 APR1 风格 它需要是 APR1 Apache 风格 才能与 mod dav svn 一起使用 我似乎找不到可以创建密码的有效
  • 故事板中的 initWithNibName 方法

    我正在按照 Facebook 的教程发布到用户的墙上 http developers facebook com docs howtos publish to feed ios sdk 尽管它是根据 xib 项目制作的 但到目前为止 我的故事
  • 发送投票电子邮件

    使用 Outlook API 可以通过在 MailItem 实例上设置 VotingOpions 属性来发送带有民意调查的电子邮件 是否可以以任何方式对 Exchange Web 服务执行相同的操作 Microsoft 已经发布了投票电子邮
  • 在Python中将点后的浮点四舍五入到2位数字

    我正在使用这段代码 f 0 3223322 float 2f f 有没有更Pythonic 更简洁的方法 无需两次转换 使用round文档中的以下注释令人沮丧 round 对于浮点数的行为可能会令人惊讶 例如 round 2 675 2 给
  • 在 pandas MultiIndex 前面添加一个级别

    我有一个 DataFrame 其中经过一些分组后创建了 MultiIndex import numpy as np import pandas as pd from numpy random import randn df pd DataF
  • 如何使用mockito验证公共类的静态方法被调用?

    伪代码是这样的 rc SomePublicClass myPublicStaticFunc arg public class SomePublicClass private SomePublicClass public static int
  • 创建过程中忽略 Config.xml

    我在使用命令行工具时遇到问题科尔多瓦 cli 我遵循了从文档 cordova create test com test 测试 在这一步中我要更改的内容www folder 1 将示例网页移至src文件夹 所以内容www are www co
  • git 子模块添加致命错误:不是 Git 存储库

    我对 Git 相当陌生 并尽力寻找有关此问题的一些文档 但无济于事 这是我的命令 git submodule add https github com joliver EventStore git externalsource JOlive
  • IEnumerator 是否有“HasNext”方法?

    使用JavaIterators 我已经用过hasNext确定迭代是否有更多元素的方法 不消耗元素 因此 hasNext就像一个 Peek 方法 我的问题 有没有类似 hasNext or Peek 具有 C 泛型的方法IEnumerator
  • 在 Apple Swift 中,在什么情况下我不想要隐式展开的可选选项?

    我相信我理解为什么可选值很方便 我最好的使用想法是能够返回一个 nil 布尔值 但是在什么情况下我想使用 声明一个包装的可选值 而不是 对于隐式解包的可选 似乎没有必要用 来声明它 然后必须打字 到处都是 而不仅仅是使用 一次 我不想忽视
  • Typescript 中的类型推断与显式类型声明

    我遇到过几个不同的代码实例 其中变量使用显式类型声明 即使推断的类型很明显 例子 loading boolean false or name string John or count number 0 etc TSLint 更喜欢推断类型而