我有一个简单的函数,将联合类型和boolean
作为参数,并且无法通过Typescript进行键入。
我有此代码(playground here):
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
?
答案 0 :(得分:1)
您可以添加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;
}
}
}