在 TypeScript 中,出现“无法赋值到类型 'never'”的问题通常是因为 TypeScript 推断某个变量的类型为 never
,而 never
类型表示的是那些永不存在的值。这个问题通常出现在以下几种情况下:
never
。never
类型的变量,TypeScript 会报错。never
。let x: never;
x = 5; // Error: Type '5' is not assignable to type 'never'.
解决方案:明确指定变量的类型。
let x: number;
x = 5; // No error
function processValue(value: string | number) {
let result: never;
if (typeof value === 'string') {
result = value; // Error: Type 'string' is not assignable to type 'never'.
} else {
result = value; // Error: Type 'number' is not assignable to type 'never'.
}
}
解决方案:正确处理类型,并确保 result
的类型与 value
的类型匹配。
function processValue(value: string | number) {
let result: string | number;
if (typeof value === 'string') {
result = value; // No error
} else {
result = value; // No error
}
}
function handleValue(value: string | number) {
if (typeof value === 'string') {
// Do something with string
} else if (typeof value === 'number') {
// Do something with number
} else {
// TypeScript thinks this branch is unreachable and infers 'never'
const neverValue: never = value; // Error: Type 'string | number' is not assignable to type 'never'.
}
}
解决方案:确保所有可能的类型都被处理。
function handleValue(value: string | number) {
if (typeof value === 'string') {
// Do something with string
} else if (typeof value === 'number') {
// Do something with number
} else {
// This branch is actually unreachable, so you can use 'never' to assert it
const neverValue: never = value;
throw new Error(`Unexpected value: ${neverValue}`);
}
}
never
。never
类型推断。领取专属 10元无门槛券
手把手带您无忧上云