知道为什么会出现TS错误吗?为什么TS可以用文字正确推断,而不能用函数返回。
游乐场连接
type Success = {
success: true;
}
type Failure = {
success: false;
code: string;
message: string;
}
type ExpectedResponse = Success | Failure
function getResponse(a: string) {
var resp: ExpectedResponse;
if (a.substr(3).length) {
// Error
resp = getSuccess() // Type '{ success: boolean; }' is not assignable to type 'ExpectedResponse'.
} else {
resp = {
success: false,
code: '4',
message: '3'
}
}
return resp
}
function getSuccess() {
return {
success: true
}
}
// this works
function getResponse2(a: string) {
let resp: ExpectedResponse;
if (a.substr(3).length) {
resp = {
success: true
}
} else {
resp = {
success: false,
code: 'E-100',
message: 'blah'
}
}
return resp
}
这也很好
function getSuccess():Success {
return {
success: true
}
}
这是因为推断出的类型
function getSuccess() {
return {
success: true
}
}
是{ success: boolean; }
而不是{ success: true; }
。
如果要防止typescript将true
扩展为boolean
,可以使用const断言:
function getSuccess() {
return {
success: true
} as const
}
游乐场