面试题答案
一键面试as进行类型断言的常见场景
- TypeScript中DOM操作:当从
document.querySelector
获取元素时,TypeScript无法准确知道返回的元素类型,此时可用as
断言。const el = document.querySelector('.my-class') as HTMLDivElement; el.textContent = 'Hello';
- 函数返回值类型不明确时:如果一个函数返回值类型不确定,但你知道它实际的类型,可使用
as
。function getValue(): any { return { message: 'Hello' }; } const value = getValue() as { message: string }; console.log(value.message);
尖括号<>
进行类型断言的常见场景
在TypeScript早期,尖括号<>
语法常用于类型断言,尤其是在JSX文件之外的代码中。但现在官方推荐使用as
,不过在一些老代码中仍可能见到。
function identity<T>(arg: T): T {
return arg;
}
const result = identity<string>('Hello');
// 这里尖括号用于指定泛型类型,虽然不是严格意义上的类型断言,但类似语法
它们在使用上的区别
- 语法风格:
as
是更现代的TypeScript语法,看起来更像是JavaScript的扩展;尖括号<>
语法在老代码和一些特定场景(如泛型指定)中常见,它的风格类似于其他语言的类型转换语法。 - 使用场景限制:在JSX文件中,只能使用
as
进行类型断言,因为尖括号<>
会被JSX解析为标签开始,导致语法错误。例如:const myElement = <div>Text</div>; // 这里不能用尖括号进行类型断言,需用as const myDiv = document.createElement('div') as HTMLDivElement;
- 代码阅读性:
as
语法相对更清晰地表达了这是一个类型断言操作,使代码更易读,而尖括号<>
可能在复杂代码中与其他尖括号语法(如标签、泛型)产生混淆。