在 TypeScript 中,unknown
表示一个未知的值。它是 TypeScript 3.0 引入的,相比 any
类型,unknown
更加安全,因为它要求在进行操作之前必须先进行类型检查。
特点和使用
类型安全性:
unknown
:代表任何值,但在你对 unknown
类型的值进行操作之前,必须首先进行类型检查或类型断言。这意味着你不能直接对 unknown
类型的值进行任何操作,直到你明确知道它的实际类型。
any
:允许对值进行任何操作,不需要先进行类型检查。这可能会导致类型安全问题,因为你可以对 any
类型的值进行任何操作而不受到编译器的约束。
类型保护:
示例:
function handleUnknown(value: unknown) {
if (typeof value === 'string') {
// 只有在 value 确定为 string 类型时才能使用 string 方法
console.log(value.toUpperCase());
} else if (typeof value === 'number') {
// 只有在 value 确定为 number 类型时才能使用 number 方法
console.log(value.toFixed(2));
} else {
console.log('Unsupported type');
}
}
在这个示例中,handleUnknown
函数对 unknown
类型的值进行了类型检查,确保在实际操作之前确认了它的类型。这种方式比直接使用 any
更安全,因为它强制要求进行类型检查。
unknown
和 any
的区别
类型安全性:
unknown
:必须进行类型检查后才能使用。编译器会强制你确保类型安全。
any
:允许对值进行任何操作,没有类型检查限制,可能会导致潜在的类型错误。
适用场景:
unknown
:适用于需要处理不确定类型的值,但仍希望保持类型安全的场景。
any
:适用于当你确定不会对值进行任何操作或者在类型转换时无法确定类型的场景,但使用 any
会丧失类型安全。