ember.js 为什么在Ember中使用DS.attr(type)时插入类型

n3schb8v  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(143)

在ember文档中,它对方法DS.attr()做了如下说明:
默认情况下,属性按原样传递,但您可以指定一个可选类型来自动转换值
如果您查看转换方法文档,它会显示以下内容:
您可以指定要为属性运行的转换,方法是将转换名称作为attr方法的第一个参数。Ember Data支持字符串、数字、布尔值和日期等属性类型,这些属性类型会将值强制转换为与其名称匹配的JavaScript类型。
所以我的问题是:显式地插入属性的类型是不是不好?2看起来它强制了某种类型的强制类型转换,就像后面提到的那样(引用如下)。3所以它可能会有一些性能下降(几乎没有)。
布尔转换可以处理除true或false之外的值。字符串“true”或“t”的任何大小写形式、“1”和数字1都将强制为true,否则为false。
我认为插入类型的唯一原因是为了使它更容易在模型中阅读,但这也可以在注解中完成...

r9f1avp5

r9f1avp51#

不,插入属性的类型并不坏,它实际上是好的。
尽管将数据加载到存储区时性能可能会有一些可忽略不计的下降,但无论API返回什么,在使用模型时都可以获得一致类型的额外好处。
如果您只使用注解来指定类型,您可能会告诉其他开发人员模型中的预期类型,但API可能会返回它想要的任何类型。在这种情况下,预期类型和实际类型可能不匹配。

ffx8fchx

ffx8fchx2#

我倾向于认为这是一个糟糕的做法,除非你有一个非常有缺陷的API,你不能控制,有时会提供一个相同字段的不同类型的属性。一般来说,一个API应该在它提供类型的方式上是可靠的。在Ember中设置类型会导致它进行类型强制,这在JavaScript中从来都不是一个好主意,因为JavaScript在类型强制方面令人惊讶地糟糕。
至于这是一个记录类型的好主意,我同意这是一个好主意。然而,在现代,Ember TypeScript是一个更好的记录类型的工具,因为文档实际上是强制执行的。

相关问题