面试题答案
一键面试实现Mixin场景
// 定义一个基础类
class Base {
baseProperty = 'base value';
}
// 定义Mixin函数,接受多个不同类型的参数
function Mixin<T extends object, U extends object>(arg1: T, arg2: U) {
return class extends Base {
mixinProperty1 = arg1;
mixinProperty2 = arg2;
};
}
// 使用Mixin函数创建新的混合类
const NewClass = Mixin({ key1: 'value1' }, { key2: 2 });
const newInstance = new NewClass();
console.log(newInstance.baseProperty);
console.log(newInstance.mixinProperty1);
console.log(newInstance.mixinProperty2);
优化类型推导以避免类型错误
-
使用泛型约束:在定义Mixin函数时,通过泛型
T
和U
约束传入参数的类型,确保传入的参数都是对象类型。这有助于在编译时捕获类型错误,例如传入非对象类型的参数。 -
明确返回类型:虽然TypeScript通常可以根据函数体推断出返回类型,但明确返回类型可以提高代码的可读性和可维护性,并且在复杂场景下有助于避免类型推导错误。在上述代码中,
Mixin
函数返回一个继承自Base
类的新类,新类包含mixinProperty1
和mixinProperty2
两个属性,其类型分别与传入的arg1
和arg2
相同。 -
类型别名或接口:对于复杂的参数类型,可以使用类型别名或接口来定义,这样可以使代码更加清晰,并且在多处使用相同类型时便于维护。例如:
interface FirstArg {
key1: string;
}
interface SecondArg {
key2: number;
}
function Mixin<T extends FirstArg, U extends SecondArg>(arg1: T, arg2: U) {
return class extends Base {
mixinProperty1 = arg1;
mixinProperty2 = arg2;
};
}
const NewClass = Mixin({ key1: 'value1' }, { key2: 2 });
通过上述方式,可以有效地优化类型推导,减少在使用Mixin时出现类型错误的可能性。