条件类型在函数调用中给出错误,但适用于对象文字



知道为什么会出现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
}

游乐场

最新更新