在 TypeScript 中,当您遇到 "不可分配"("not assignable")这样的错误时,通常是因为 TypeScript 编译器无法确定类型之间是否存在有效的赋值关系
假设我们有以下代码:
interface Person {
name: string;
age: number;
}
interface Employee {
name: string;
employeeId: number;
}
function process(person: Person) {
// ...
}
const employee: Employee = { name: "John", employeeId: 123 };
process(employee); // 错误:类型“Employee”不能分配给类型“Person”
在这个例子中,Employee
类型不能分配给 Person
类型,因为 Employee
缺少 age
属性。
要解决这个问题,您可以:
const employee: Employee = { name: "John", employeeId: 123, age: 30 };
process(employee as unknown as Person); // 不推荐,因为这可能导致运行时错误
type PersonOrEmployee = Person | Employee;
function process(personOrEmployee: PersonOrEmployee) {
// ...
}
process(employee); // 正确
function isPerson(obj: any): obj is Person {
return obj && typeof obj.name === "string" && typeof obj.age === "number";
}
function process(personOrEmployee: Person | Employee) {
if (isPerson(personOrEmployee)) {
// ...
} else {
// ...
}
}
process(employee); // 正确
interface Person {
name: string;
age?: number; // 将 age 设置为可选属性
}
const employee: Employee = { name: "John", employeeId: 123 };
process(employee); // 正确
根据您的具体需求,可以选择上述方法之一来解决 "不可分配" 的问题。
领取专属 10元无门槛券
手把手带您无忧上云