fe-interview icon indicating copy to clipboard operation
fe-interview copied to clipboard

[TypeScript] 第1525天 在TypeScript中使用unknown的场景是什么?

Open haizhilin2013 opened this issue 2 years ago • 2 comments

第1525天 在TypeScript中使用unknown的场景是什么?

3+1官网

我也要出题

haizhilin2013 avatar Jun 18 '23 20:06 haizhilin2013

let timeout: number = 0; timeout = setTimeout(() => { destruction(); }, 1000 * 60) as unknown as number;

hemengzhao avatar Sep 26 '23 03:09 hemengzhao

在TypeScript中,unknown是一种类型,它表示一个未知类型的值。与any类型类似,unknown可以代表任何类型的值,但它更严格,提供了更好的类型安全性。使用unknown的场景通常涉及需要处理不确定类型的值,并且希望在进一步操作之前进行类型检查。

使用场景

  1. 接收外部数据: 当从外部接收数据(例如从API响应、用户输入、或者第三方库)时,通常我们并不确定其具体类型。在这种情况下,可以将数据类型声明为unknown,然后在使用前进行类型检查。

  2. 类型安全的any替代any类型允许对值进行任何操作而不会有编译错误,但这也可能导致潜在的运行时错误。unknown则需要在使用前进行类型断言或检查,从而提高了代码的类型安全性。

示例

以下是一些使用unknown类型的实际示例:

示例 1:接收API响应数据

function handleApiResponse(response: unknown) {
    if (typeof response === 'string') {
        console.log(`Received string response: ${response}`);
    } else if (typeof response === 'object' && response !== null) {
        console.log('Received object response', response);
    } else {
        console.log('Unknown response type');
    }
}

示例 2:处理用户输入

function processUserInput(input: unknown) {
    if (typeof input === 'number') {
        console.log(`Input is a number: ${input}`);
    } else if (typeof input === 'string') {
        console.log(`Input is a string: ${input}`);
    } else {
        console.log('Unknown input type');
    }
}

示例 3:类型断言

function getLength(value: unknown): number {
    if (typeof value === 'string' || Array.isArray(value)) {
        return value.length;
    } else {
        throw new Error('Value must be a string or an array');
    }
}

在这些示例中,我们首先将输入类型声明为unknown,然后在使用之前进行类型检查或类型断言。这种方法确保了代码的类型安全性,避免了运行时错误。

unknown vs any

  • any:可以对其进行任何操作,编译器不会进行类型检查,但可能导致运行时错误。
  • unknown:必须在使用前进行类型检查或断言,从而确保了类型安全。

总结

使用unknown类型的主要好处是,它可以提供比any更严格的类型安全性,强制开发者在使用未知类型的值之前进行适当的类型检查。这对于处理不确定类型的数据(如外部数据、用户输入等)非常有用,可以有效减少运行时错误并提高代码的健壮性。

llccing avatar Jun 26 '24 06:06 llccing