any类型
function logValueAny(arg: any) {
console.log(arg.length); // 这里不会报错,因为any类型允许访问任意属性和方法
}
logValueAny('hello');
logValueAny(123);
- 优点:
- 高度灵活,能接受任意类型的值,在前期快速开发或处理类型不确定但暂时不想被类型检查限制的场景很有用。比如在处理第三方库返回值类型不明确时,使用
any
可快速实现功能。
- 编写代码时无需过多考虑类型,可直接操作值的属性和方法,提高开发效率。
- 缺点:
- 完全绕过了TypeScript的类型检查机制,可能导致运行时错误。例如上面代码传入数字时,
arg.length
在运行时会报错,因为数字没有length
属性。
- 破坏了代码的可维护性和可读性,其他开发者难以从类型声明得知实际传入值的预期类型。
unknown类型
function logValueUnknown(arg: unknown) {
// console.log(arg.length); // 这里会报错,因为unknown类型不允许直接访问属性和方法
if (typeof arg ==='string') {
console.log(arg.length);
}
}
logValueUnknown('hello');
logValueUnknown(123);
- 优点:
- 提供了更安全的类型处理方式,强制开发者在使用值之前进行类型检查,从而避免运行时错误。
- 明确表示值的类型未知,增强了代码的可读性和可维护性,提醒其他开发者需要谨慎处理该值。
- 缺点:
- 使用起来相对繁琐,每次使用值时都需要进行类型检查,增加了代码量。
- 在处理复杂类型关系时,类型检查逻辑可能变得复杂,增加开发成本。