当没有要指定的确切值“未定义”或“空”时,为 TypeScript 可选参数传递啥? [复制]
Posted
技术标签:
【中文标题】当没有要指定的确切值“未定义”或“空”时,为 TypeScript 可选参数传递啥? [复制]【英文标题】:What to pass for TypeScript optional parameter when there is no exact value to specify, 'undefined' or 'null'? [duplicate]当没有要指定的确切值“未定义”或“空”时,为 TypeScript 可选参数传递什么? [复制] 【发布时间】:2019-03-21 18:13:18 【问题描述】:我在 TypeScript 中有以下函数(我无法更改参数的顺序),
user(firstName: string, lastName?: string, address?: string);
在我只需要传递firstName
和address
的情况下,作为lastname
传递的更好/合适/推荐值是什么?
case 1: user("Jack", undefined, "NY");
或
case 2: user("Jack", null, "NY");
每种方法的优缺点是什么?
【问题讨论】:
“更好”关于什么? @IngoBürk 什么是最合适或推荐的?这两种方法的行为是否相同? 这取决于函数是如何实现的。如果您省略第二个(和第三个)参数,使用 undefined 会发生什么,但 null 更短(这也是一个指标)。函数在 undefined 或 null 上的行为取决于实现。 @IngoBürk 在函数中它没有明确处理这种情况。在那种情况下,我应该通过什么。这个功能我不能改变。 (但我想知道除了处理那些 null 和 undefined 之外还有哪些可能的更改) 最安全的方法是使用 undefined。如果该函数不处理这个问题,它可能不应该首先将这些参数设为可选,因为user("Jack")
与user("Jack", undefined, undefined)
相同,那么如果它不能处理缺少的参数,为什么还要设置可选参数。跨度>
【参考方案1】:
你应该使用未定义的。
这个:
lastName?: string
告诉我们lastName
参数的类型为string | undefined
。所以使用null
是非法的(在严格模式下,这有点好)。使用未定义。
【讨论】:
只有启用了strictNullChecks 才是非法的,IMO 是个好主意。 @AndyJ 我忘记了这一点,因为在任何项目中,我做的第一件事就是启用strict: true
。非严格的打字稿对我来说很奇怪。
是的,我也是这样做的。【参考方案2】:
我找到了这个The Typescript coding style guide,它指出你应该始终使用 undefined 而不是 null,
null 和 未定义
使用未定义。不要使用 null。
无论如何检查here,
undefined
表示变量已声明但尚未赋值。
null
是一个赋值。它可以分配给一个变量作为没有值的表示。所以为了达到optional
的目的,我认为undefined
会更好。
【讨论】:
它并没有说你应该总是使用 undefined,它说当你为 TS 代码库做贡献时你应该总是使用 undefined ...“这些是 TypeScript 贡献者的编码指南。这个不是 TypeScript 社区的规范性指南。”他们继续将信息带回家“再次:这不是 TypeScript 社区的规定性指南” 无论如何检查这里,未定义... 该链接解释了 javascript 上下文中的主题。如果您想知道 TS 的正确性,请看我的回答,它是 100% 合法的 @NurbolAlpysbayev 我认为这不会造成任何伤害吧? 链接?如果是,那么链接在 JS 上下文中是正确的。此外,它对 Typescript 也是正确的,因为它是 JS 的超集。但主题是关于 Typescript,所以我想你想从 type system 的角度了解什么是正确的方法。 @NurbolAlpysbayev 同意您的理解。我只需要强调这两者之间的区别。以上是关于当没有要指定的确切值“未定义”或“空”时,为 TypeScript 可选参数传递啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章