haizlin / fe-interview

前端面试每日 3+1,以面试题来驱动学习,提倡每日学习与思考,每天进步一点!每天早上5点纯手工发布面试题(死磕自己,愉悦大家),6000+道前端面试题全面覆盖,HTML/CSS/JavaScript/Vue/React/Nodejs/TypeScript/ECMAScritpt/Webpack/Jquery/小程序/软技能……
http://www.h-camel.com
MIT License
25.4k stars 3.25k forks source link

[TypeScript] 第1553天 在TypeScript中as语法是什么? #5516

Open haizhilin2013 opened 1 year ago

haizhilin2013 commented 1 year ago

第1553天 在TypeScript中as语法是什么?

3+1官网

我也要出题

lixiangrui-1 commented 1 year ago

在TypeScript中,as 是一种类型断言。它用于显式地指定一个值的类型。

llccing commented 3 months ago

在 TypeScript 中,as 语法用于类型断言(Type Assertion),它允许开发者明确地告诉编译器某个值的类型。在 JavaScript 的动态类型环境中,有时候编译器无法推断出具体的类型,此时类型断言就派上了用场。

类型断言有两种常见的语法形式:

1. 使用 as 关键字

这是推荐的类型断言语法,特别是在使用 JSX 时,因为另一种语法会与 JSX 语法冲突。

let someValue: unknown = "this is a string";

// 将 someValue 断言为 string 类型
let strLength: number = (someValue as string).length;

2. 尖括号语法

在非 JSX 环境下,另一种类型断言语法是使用尖括号:

let someValue: unknown = "this is a string";

// 将 someValue 断言为 string 类型
let strLength: number = (<string>someValue).length;

类型断言的用途

  1. 告诉编译器更具体的类型:在一些情况下,编译器无法推断出某个变量的具体类型,类型断言可以帮助明确类型。

    function getLength(something: string | number): number {
        if ((something as string).length !== undefined) {
            return (something as string).length;
        } else {
            return something.toString().length;
        }
    }
  2. 与 DOM 交互:在操作 DOM 元素时,类型断言可以用来指定更具体的类型。

    let inputElement = document.getElementById("myInput") as HTMLInputElement;
    console.log(inputElement.value);

注意事项

示例

以下是一个实际使用类型断言的例子:

interface Cat {
    name: string;
    run(): void;
}

interface Fish {
    name: string;
    swim(): void;
}

function isFish(pet: Cat | Fish): boolean {
    return (pet as Fish).swim !== undefined;
}

const pet: Cat = {
    name: "Tom",
    run() {
        console.log("Running");
    }
};

console.log(isFish(pet)); // false

在这个例子中,我们使用类型断言 pet as Fish 来判断 pet 是否具有 swim 方法,从而区分它是 Cat 还是 Fish

通过类型断言,开发者可以在 TypeScript 中更精确地控制类型,编写更类型安全的代码。