是否有设置使类型记录将非空断言编译为引发错误的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"我想要一个设置或扩展,或者让它编译成这样的东西:
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断言或错误?
发布于 2021-07-06 20:27:29
一种选择是使用类似于宏t的东西作为宏编写自己的宏。这样的功能永远不会出现在类型记录中,因为该项目专门针对构建时(静态)类型检查,正如Alex所解释的那样。
发布于 2021-05-28 22:12:05
不是的。
非空断言具体地告诉编译器,您知道的比它更清楚。它纯粹是一个用于管理类型信息的构造。但是,如果你不知道比编译器更好,那么你将不得不自己处理它。
为了类型安全起见,这是一个最好避免的特性(除了可以100%确定值为非空的罕见的occassions ),甚至还有一些来自eslint的帮助,让您知道它在规则中是危险的。
好消息是,我想,如果您断言值是非空的,但它是空的,那么您的程序最终可能会在某个地方崩溃。
https://stackoverflow.com/questions/67745384
复制相似问题