首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在失败的非空断言上生成类型标抛出运行时错误?

问如何在失败的非空断言上生成类型标抛出运行时错误?
EN

Stack Overflow用户
提问于 2021-05-28 20:56:06
回答 2查看 800关注 0票数 2

是否有设置使类型记录将非空断言编译为引发错误的javascript?

默认情况下,非空断言被丢弃(游乐场):

代码语言:javascript
复制
// Typescript:
function foo(o: {[k: string]: string}) {
    return "x is " + o.x!
}
console.log(foo({y: "ten"}))

// Compiled into this js without warnings:
function foo(o) {
    return "x is " + o.x;
}
console.log(foo({ y: "ten" }));
// output: "x is undefined"

我想要一个设置或扩展,或者让它编译成这样的东西:

代码语言:javascript
复制
function foo(o) {
    if (o.x == null) { throw new Error("o.x is not null") }
    // console.assert(o.x != null) would also be acceptable
    return "x is " + o.x;
}

是否有任何方法将非空感叹号断言转换为javascript断言或错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-06 20:27:29

一种选择是使用类似于宏t的东西作为宏编写自己的宏。这样的功能永远不会出现在类型记录中,因为该项目专门针对构建时(静态)类型检查,正如Alex所解释的那样。

票数 1
EN

Stack Overflow用户

发布于 2021-05-28 22:12:05

不是的。

非空断言具体地告诉编译器,您知道的比它更清楚。它纯粹是一个用于管理类型信息的构造。但是,如果你不知道比编译器更好,那么你将不得不自己处理它。

为了类型安全起见,这是一个最好避免的特性(除了可以100%确定值为非空的罕见的occassions ),甚至还有一些来自eslint的帮助,让您知道它在规则中是危险的。

好消息是,我想,如果您断言值是非空的,但它是空的,那么您的程序最终可能会在某个地方崩溃。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67745384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档