Typescript 解释打字脚本';s交叉口类型
我在玩交叉路口的类型,我希望下面的工作 有人能解释一下吗Typescript 解释打字脚本';s交叉口类型,typescript,types,Typescript,Types,我在玩交叉路口的类型,我希望下面的工作 有人能解释一下吗 type SomeError = { message: string; code?: number; }; type SomeResponse = { error: SomeError & { code: string; } }; const response: SomeResponse = { error: { message: 'neco',
type SomeError = {
message: string;
code?: number;
};
type SomeResponse = {
error: SomeError & { code: string; }
};
const response: SomeResponse = {
error: {
message: 'neco',
code: 'a'
}
};
// Type 'string' is not assignable to type 'number'.
const response2: SomeResponse = {
error: {
message: 'neco',
code: 50
}
};
// Type 'number' is not assignable to type 'string'.
问题是
SomeResponse
的code
具有此类型:
number & string
这是不可能的
您可以很容易地检查以下情况:
test
的类型是number&string
(只需将鼠标悬停在变量名上)正如其他人所指出的,似乎您需要联合类型(使用|
)。检查和测试理论
下面的代码使用接口和联合类型在错误类型中获得灵活的数字/字符串代码
interface SomeError {
message: string;
code: number | string;
};
interface SomeResponse {
error: SomeError
}
const response: SomeResponse = {
error: {
message: 'neco',
code: 'a'
}
};
const response2: SomeResponse = {
error: {
message: 'neco',
code: 50
}
};
const printErrCode = (code: string | number) => {
if(typeof code === "string") {
console.error(code);
} else {
console.error(`Err code: ${code}`);
}
}
编辑:如果您想使用交叉点,请尝试复制,但要使用您的错误域。尝试将错误序列化/可记录/可打印等,然后将一个纯错误对象(仅包含字符串或其他内容)与一个可记录的对象(如ConsoleLogger的示例)混合在一起。基本上您有
code:string&number
。你怎么能期望code
既是一个数字
又是一个字符串
?您是否正在寻找可以将code
定义为number
或string
的位置?
const printErrCode = (code: string | number) => {
if(typeof code === "string") {
console.error(code);
} else {
console.error(`Err code: ${code}`);
}
}