【发布时间】:2018-02-04 09:41:37
【问题描述】:
我不希望将特定函数作为参数传递给另一个函数,但是根据 TypeScript,它是有效的,但是是吗?为什么?
代码示例如下:
function spoken(nope?: never): void {
console.log("He has spoken.");
}
function speak(toSay: string, spoken: (arg1: string) => void): void {
console.log("He says: " + toSay);
spoken("He has spoken.");
}
speak("Hello world.", spoken);
因为基本上,TypeScript 说类型 string 可以分配给类型 never,因为如果没有,让我们说类型 number,TypeScript 会抱怨,因为类型 string 与类型 number 不兼容。
【问题讨论】:
-
这里到底有什么意义?如果您不希望
spoken函数接收参数,那么不要声明一个参数? -
当你说“根据 TypeScript 是有效的”时,你是什么意思?您应该打开
strictNullChecks编译器选项;你会看到你期望的错误。关闭strictNullChecks不是一个好主意,尤其是对于新代码(从纯 JS 迁移时暂时使用false是合理的)。 -
顺便说一句,这显然与我的answer@WilcoBakker 上一个问题有关
-
@jcalz 是的,事实上,这是基于您的回答的直接后续问题。
标签: typescript types