Typescript 条件必需参数
实际上我被一个有趣的问题困住了 我希望有以下行为:Typescript 条件必需参数,typescript,type-inference,typescript-generics,Typescript,Type Inference,Typescript Generics,实际上我被一个有趣的问题困住了 我希望有以下行为: 若err为null,那个么结果是必需的,因为我返回了它 若err不为null,那个么result是可选的,因为我将返回我的错误 及 我真的不明白为什么我会犯这些错误 问题是,如果我得到了一个错误,我将永远不会返回结果,我之前用if(err)验证错误不是null,所以我不能返回null。 数字也是一样,有了我的扩展,我确信这个数字永远不会被定义 我认为这是一个推理的问题。我在做坏事,但我找不到地方 谢谢:p谢谢Aleksey L 正确的代码是
- 若err为null,那个么结果是必需的,因为我返回了它
- 若err不为null,那个么result是可选的,因为我将返回我的错误
if(err)
验证错误不是null,所以我不能返回null。
数字也是一样,有了我的扩展,我确信这个数字永远不会被定义
我认为这是一个推理的问题。我在做坏事,但我找不到地方
谢谢:p谢谢Aleksey L
正确的代码是
/**
* Callback type on error
*
* @param err {Error} - Error object
* @param result - No result
* @return Error
*/
function callback(err: Error, result?: undefined): Error;
/**
* Callback type on success
*
* @param err {null} - No error
* @param result {number} - Result
* @return result
*/
function callback(err: null, result: number): number;
function callback(err: any, result: any): any {
if (err) {
return err;
}
return result;
}
function main() {
console.log(callback(null, 4));
console.log(callback(new Error('error')));
}
请看一下重载是否工作正常,谢谢
Type 'Error | null' is not assignable to type 'number | Error'.
Type 'null' is not assignable to type 'number | Error'.
Type 'ErrorType' is not assignable to type 'Error'.
Type 'Error | null' is not assignable to type 'Error'.
Type 'null' is not assignable to type 'Error'.
return err;
Type '(ErrorType extends null ? number : undefined) | undefined' is not assignable to type 'number | Error'.
Type 'undefined' is not assignable to type 'number | Error'.
return result;
/**
* Callback type on error
*
* @param err {Error} - Error object
* @param result - No result
* @return Error
*/
function callback(err: Error, result?: undefined): Error;
/**
* Callback type on success
*
* @param err {null} - No error
* @param result {number} - Result
* @return result
*/
function callback(err: null, result: number): number;
function callback(err: any, result: any): any {
if (err) {
return err;
}
return result;
}
function main() {
console.log(callback(null, 4));
console.log(callback(new Error('error')));
}