我有一个简单的函数,将联合类型和aboolean
作为参数,并且无法通过Typescript进行键入。
我有此代码(这里是操场):
type A = 'a' | 'A';
function f(a: A, b: boolean): string {
if (b) {
switch (a) {
case 'a': return '';
case 'A': return '';
}
} else {
switch (a) {
case 'a': return '';
case 'A': return '';
}
}
}
编译器(strictNullChecks
启用时)告诉我Function lacks ending return statement and return type does not include 'undefined'.
我真的不想添加default
案例,因为这里的目的是确保在添加新类型时,A
我可以正确处理它们f
。而且我看不到我缺少哪个分支。
我可以通过写来解决(请参见链接的游乐场):
function g(a: A): string {
switch (a) {
case 'a': return '';
case 'A': return '';
}
}
function f2(a: A, b: boolean): string {
if (b) {
return g(a);
} else {
return g(a);
}
}
(当然,在现实生活中,我需要两个不同的g函数,但是对于键入问题而言,这并不重要)。
如何在f
不引入类似中间函数的情况下让打字稿进行编译g
?
您可以添加default
案例来修复它,例如
function f(a: A, b: boolean): string {
if (b) {
switch (a) {
case 'a': return '';
case 'A':
default: return '';
}
} else {
switch (a) {
case 'a': return '';
case 'A':
default: return '';
}
}
}
您还可以never
通过返回使用类型来修复它,例如
function f(a: A, b: boolean): string {
if (b) {
switch (a) {
case 'a': return '';
case 'A': return '';
default:
const _exhaustiveCheck: never = a;
return _exhaustiveCheck;
}
} else {
switch (a) {
case 'a': return '';
case 'A': return '';
default:
const _exhaustiveCheck: never = a;
return _exhaustiveCheck;
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句