嘿!
我正在更新 Programming TypeScript 以包含 assertions in control flow analysis,并在命名方面寻求指导。
类型Assert( x as T
)和控制流分析中的Assert( asserts x is T
)具有相似的名称。有什么好的方法来称呼这些功能,以不让人困惑并与TS团队沟通的方式保持一致?
一些想法:
- 将
x as T
重命名为“类型强制”或“类型转换”(尽管它不是运行时行为),并将asserts x is T
称为“类型Assert” - 保持
x as T
原样(“类型Assert”),并将asserts x is T
称为“用户自定义类型Assert”,类似于“用户自定义类型保护”
谢谢!
5条答案
按热度按时间nbewdwxp1#
我喜欢称
as T
操作员为make-this-expression-of-type-T-trust-me-i-know-what-type-this-is-and-i-know-what-i-am-doing-but-can-you-please-check-if-both-types-sufficiently-overlap-anyway-just-in-case
操作员。我从不喜欢用“cast”这个词,因为它在其他编程语言中暗示了其他含义。
vsdwdz232#
嗯,也许
x as T
是一个Assert表达式,而调用返回asserts x is T
的函数是一个Assert语句:Playground链接
j91ykkif3#
免责声明:我的观点
在这些情况下,"assertion"意味着你告诉编译器一个类型是什么,编译器会相信你知道你在做什么。例如:
x as T
是一个类型Assert,因为它对编译器有要求,而且可能是错误的(与x: T
不同)asserts x is T
是一个 assertion signature(因为它总是在现有函数的末尾),可以被称为function with an signature
。编译器也不会验证它。btqmn9zl4#
我喜欢@orta和@jcalz的想法!这本书的修订已经准备好了,等待这个决定。
在名称中可能还有一点值得指出的是,
asserts
有点独特,因为它在类型级别上很像副作用。"Assert效果"或"细化效果"可能有点过于学术化,但也许有一个更明显的名字可以使这一点变得清楚。jrcvhitl5#
在文档中是否有"Assert签名"或"Assert"?我搜索了但找不到。我是Typescript的新手,已经看过多个教程提到"x as T"作为类型转换。然后在一个更高级的教学中,我学到了"Assert x 是 T",并假设它是"类型Assert",因为讲师没有用它的名字来称呼。我现在在这里是因为另一个教程正在讲解"x as T"的使用,刚刚提到它作为类型Assert而不是类型转换,所以我去谷歌搜索,因为我以为他们是错误的。这也让我感到困惑,因为我在测试和其他语言中将Assert视为根据条件或表达式的结果返回true或false的测试或检查。