any类型
any类型是 TS 中的一种特殊类型,它表示任何类型都可以赋值给它,即不进行类型检查。(也就是被大家调侃的anyScript)
1、声明变量为any类型
let value: any = 5;
value = "Hello, World!"; // string
value = true; // boolean
value = new Date() // date
value = 100n // bigint
value = new Map() // map
// 可以将 value 分配为任何类型的值
2、作为函数参数或返回值
function doSomething(value: any): any {
// 这个函数接受任何类型的参数并返回任何类型的值
return value;
}
3、与第三方库集成
当你使用第三方库,或者处理动态数据,有时 TypeScript 无法推断出正确的类型,这时可以使用any来解决问题:
const data: any = fetchDataFromApi();
// 假设 fetchDataFromApi() 返回未知类型的数据
4、逐步迁移
如果你正在将 JavaScript 项目迁移到 TypeScript,any 类型可以用来逐步迁移,允许你在不改变太多代码的情况下引入类型注解
unknown类型
unknown 类型也可以表示任何值,但与 any 不同,它是提高了类型安全的。当你将一个值声明为 unknown 类型时,你必须在使用之前进行类型检查或类型断言。这可以帮助你在编译时捕获类型错误。
1、动态数据
当你从外部数据源获得数据,且无法确定其类型时,可以将其声明为 unknown 类型
const resData : unknown = await ajax.get('/api/users')
2、类型安全
如果你编写一个函数,不确定参数的类型,但希望保持类型安全,可以使用 unknown
let userInput: unknown = getUserInput(); // 从外部获取用户输入
if (typeof userInput === "string") {
let strLength: number = userInput.length; // 合法
}
// 或者使用类型断言
let strLength: number = (userInput as string).length;
never 类型
never 类型用于表示不会正常返回的函数或处理不可能发生的情况,它有助于提高代码的类型安全性,并确保在编译时捕获潜在的错误
1、抛出异常
当一个函数总是抛出异常而不会正常返回时,可以将其返回类型标记为 never
function throwError(message: string): never {
throw new Error(message);
}
2、类型保护
never 类型常用于类型保护,帮助编译器理解某些操作将导致程序中的类型错误
function assertNever(x: never): never {
throw new Error("Unexpected object: " + x);
}
function processValue(value: string | number) {
switch (typeof value) {
case "string":
// 处理字符串
break;
case "number":
// 处理数字
break;
default:
assertNever(value); // 这里会抛出错误,因为 value 的类型为 never
}
}
tip: 个人学习笔记,如有错误,敬请雅正