作为其他代码的用户,我希望能够查看一个函数并根据类型是否可选来确定所需的内容。
例如:
function doSomething(required: string, optional?: string)
但是作为一个正在编写供他人使用的代码的开发人员,我仍然想表示一个参数是必需的,但是我希望进行类型检查,好像它不是必需的,因为我不能保证最终用户也正在使用打字稿,我想妥善处理错误的论点。
可以吃我的蛋糕吗?如果我不检查或处理未定义的参数,是否可以将参数表示为非可选参数,但仍然会出现编译错误?
?: string
和: string | undefined
之间存在语义差异
还是仅对所有必填字段都具有先决条件的解决方案?
答案 0 :(得分:2)
可以在调用中省略可选参数。尽管您可以传入T | undefined
undefined
的必需参数。
function doSomething(required: string, optional: string | undefined) {
}
doSomething("") // error in TS
doSomething("", undefined)
如果用户不使用Typescript,那么这都不重要,因为用户无论如何都可以传递更少的参数。
function doSomething(required: string, optional: string) {
}
doSomething("") /// Bad in ts, but fine in JS
答案 1 :(得分:0)
如果即使需要所需的值也要记住处理未定义的情况,那么您可以重铸传递的参数,并且打字稿会在编译时对您大喊大叫,而不检查此重铸的值是否未定义
在下面的示例中,我在函数内部使用了as string | undefined
,对于该函数的用户,他们将看到所有参数都是必需的,但您仍然会感到防御。
function doSomthingElse(requiredString1: string, requiredString2: string) {}
function doSomething(required: string, required2: string) {
const recasted = required2 as string | undefined
doSomthingElse(required, recasted) //TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string
}