Typescript - 类型守卫(typeof / in / instanceof / 自定义类型保护的类型谓词)通俗易懂详细教程
// 定义一个简单的类
class SimpleClass {
value: string;
constructor(value: string) {
this.value = value;
}
}
// 定义一个接口
interface SimpleInterface {
value: string;
}
// 使用typeof进行类型守卫
function checkTypeOf(arg: any): arg is string {
return typeof arg === 'string';
}
// 使用in关键字进行类型守卫
function checkIn(arg: any): arg is SimpleInterface {
return 'value' in arg;
}
// 使用instanceof进行类型守卫
function checkInstanceof(arg: any): arg is SimpleClass {
return arg instanceof SimpleClass;
}
// 自定义类型守卫
function isSimpleClass(arg: any): arg is SimpleClass {
return arg && typeof arg.value === 'string';
}
// 示例
const myString = 'This is a string';
const myObject = { value: 'This is an object with a string property' };
const myInstance = new SimpleClass('This is an instance of SimpleClass');
console.log(checkTypeOf(myString)); // true
console.log(checkIn(myObject)); // true
console.log(checkInstanceof(myInstance)); // true
console.log(isSimpleClass(myInstance)); // true
这段代码定义了一个简单的类SimpleClass
和一个接口SimpleInterface
,并使用TypeScript编写了几个类型守卫函数。每个函数都检查传入的参数是否符合特定的类型条件,并返回一个表示参数类型的布尔值。这种方式可以在编译时确保类型安全,避免在运行时出现类型错误。
评论已关闭