如何使打字稿在失败的非空断言上抛出运行时错误?
How to make typescript throw runtime error on failed non-null assertion?
是否有设置使 typescript 将非空断言编译为 javascript 并引发错误?
默认情况下,非空断言被丢弃(playground):
// 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 断言或错误吗?
没有。
非空断言专门告诉编译器你比它知道的更多。它纯粹是一种用于管理类型信息的结构。但是,如果您对编译器的了解不多,那么您将不得不自己处理它。
为了类型安全,最好完全避免使用此功能(除了极少数情况,您可以 100% 确定该值不为空),eslint 甚至还提供了一些帮助让您知道它是在 no-non-null-assertion
rule
中很危险
我想,好消息是,如果您断言该值不为空,但它是空的,那么您的程序可能最终会在某个地方崩溃...
一种选择是使用 macro-ts 之类的方法将您自己的代码编写为宏。像这样的功能永远不会出现在打字稿中,因为该项目专门针对构建时(静态)类型检查,正如 Alex Wayne 所解释的那样。
是否有设置使 typescript 将非空断言编译为 javascript 并引发错误?
默认情况下,非空断言被丢弃(playground):
// 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 断言或错误吗?
没有。
非空断言专门告诉编译器你比它知道的更多。它纯粹是一种用于管理类型信息的结构。但是,如果您对编译器的了解不多,那么您将不得不自己处理它。
为了类型安全,最好完全避免使用此功能(除了极少数情况,您可以 100% 确定该值不为空),eslint 甚至还提供了一些帮助让您知道它是在 no-non-null-assertion
rule
我想,好消息是,如果您断言该值不为空,但它是空的,那么您的程序可能最终会在某个地方崩溃...
一种选择是使用 macro-ts 之类的方法将您自己的代码编写为宏。像这样的功能永远不会出现在打字稿中,因为该项目专门针对构建时(静态)类型检查,正如 Alex Wayne 所解释的那样。