当前位置: 首页 > news >正文

TypeScript 核心语法与 Vue2 指令知识点

一、TypeScript 核心语法

1. 基础类型

TypeScript 在 JavaScript 基础上新增类型约束,常用基础类型如下:

  • 布尔值(boolean):仅包含 truefalse
  • 数字(number):支持整数、浮点数、十六进制等
  • 字符串(string):支持单引号、双引号
  • 数组:两种声明方式,一是“类型+[]”,二是“Array<类型>”
  • 枚举(enum):为一组数值赋予友好名称,默认从 0 开始编号,也可自定义值,如:
    enum Color { Red, Green, Blue }
    let c: Color = Color.Green; // 1(默认编号)
    // 自定义值
    enum Color2 { Red = 1, Green = 2, Blue = 4 }
    
  • null/undefined:是所有类型的子类型

2. 接口(Interface)

用于定义对象的“形状”,约束对象的属性名和属性类型,支持可选属性、只读属性:

// 基础接口
interface Person {readonly id: number; // 只读属性,初始化后不可修改name: string;age?: number; // 可选属性,可存在或不存在
}// 使用接口约束对象
let person: Person = {id: 1,name: "Alice"// age 可选,可省略
};
person.id = 2; // 报错:只读属性不可修改

3. 函数类型

约束函数的参数类型和返回值类型,有两种声明方式:

  • 直接声明:明确参数和返回值类型,如:
    // (参数1: 类型, 参数2: 类型) => 返回值类型
    function add(a: number, b: number): number {return a + b;
    }
    
  • 接口定义函数类型:通过接口复用函数类型,如:
    interface AddFunc {(a: number, b: number): number;
    }
    let add: AddFunc = (a, b) => a + b;
    
  • 可选参数与默认参数:可选参数用 ? 标记,默认参数直接赋值,如:
    // 可选参数(必须放在必填参数后)
    function greet(name: string, age?: number): string {return age ? `Hi ${name}, ${age}` : `Hi ${name}`;
    }
    // 默认参数
    function getPrice(price: number, discount: number = 0.8): number {return price * discount;
    }
    

4. 类(Class)

TypeScript 增强了 ES6 类的功能,支持访问修饰符、类实现接口、继承等:

  • 访问修饰符:控制属性/方法的访问权限:
    • public(默认):类内、类外、子类均可访问;
    • private:仅类内可访问;
    • protected:类内和子类可访问。
    class Animal {public name: string; // 等同于 name: stringprivate age: number;protected type: string;constructor(name: string, age: number, type: string) {this.name = name;this.age = age;this.type = type;}public sayName(): void {console.log(this.name);console.log(this.age); // 类内可访问 private 属性}
    }class Dog extends Animal {constructor(name: string, age: number) {super(name, age, "dog");}sayType(): void {console.log(this.type); // 子类可访问 protected 属性// console.log(this.age); // 报错:private 属性子类不可访问}
    }let cat = new Animal("Tom", 3, "cat");
    console.log(cat.name); // 可访问 public 属性
    // console.log(cat.age); // 报错:private 属性类外不可访问
    

5. 泛型(Generic)

解决“类型复用”问题,在定义函数、接口、类时不指定具体类型,使用时再传入类型,如:

  • 泛型函数
    // <T> 是泛型参数,代表“任意类型”,使用时传入具体类型
    function getArray<T>(items: T[]): T[] {return [...items];
    }// 使用时指定类型(也可省略,TS 自动推断)
    let numArr: number[] = getArray<number>([1, 2, 3]);
    let strArr: string[] = getArray(["a", "b"]); // 自动推断为 string 类型
    

二、Vue2 指令知识点

1. 插值表达式

用于将数据渲染到页面,语法为 {{ 数据 }},支持简单运算和表达式

  • 基础用法:渲染 data 中的数据,如:
    <template><div><p>姓名:{{ name }}</p><p>年龄:{{ age + 1 }}</p> <!-- 支持简单运算 --></div>
    </template><script>
    export default {data() {return {name: "张三",age: 20};}
    };
    </script>
    

2. Vue2 常用指令

指令是带有 v- 前缀的特殊属性,用于操作 DOM、绑定数据等,常用指令如下:

(1)v-text

渲染文本,功能与插值表达式类似,但会覆盖元素内所有内容(插值表达式仅替换自身):

<template><div v-text="name"></div> <!-- 等同于 <div>{{ name }}</div> --><div>前缀:{{ name }}</div> <!-- 插值表达式可保留其他内容 -->
</template>
(2)v-html

渲染原始 HTML

<template><div v-html="htmlContent"></div>
</template><script>
export default {data() {return {htmlContent: "<h1>这是一个标题</h1>" // 页面会渲染为 <h1> 标签};}
};
</script>
(3)v-bind

动态绑定 HTML 属性(如 srcclassstyle、自定义属性等),可简写为 :

  • 绑定普通属性
    <template><img :src="imgUrl" :alt="imgAlt"> <!-- 绑定 src 和 alt 属性 --><div :id="boxId"></div> <!-- 绑定 id 属性 -->
    </template><script>
    export default {data() {return {imgUrl: "https://example.com/img.jpg",imgAlt: "示例图片",boxId: "container"};}
    };
    </script>
    
  • 绑定 class:支持对象、数组两种写法:
    <template><!-- 对象写法:键是类名,值是布尔值(true 则添加类) --><div :class="{ active: isActive, red: isRed }"></div><!-- 数组写法:直接传入类名数组 --><div :class="[activeClass, redClass]"></div>
    </template><script>
    export default {data() {return {isActive: true,isRed: false,activeClass: "active",redClass: "red"};}
    };
    </script>
    
(4)v-on

绑定事件监听器,可简写为 @,支持事件修饰符(如 stopprevent)和按键修饰符(如 enter):

  • 基础用法
    <template><button @click="handleClick">点击按钮</button><input @input="handleInput" placeholder="输入内容">
    </template><script>
    export default {methods: {handleClick() {alert("按钮被点击");},handleInput(e) { // e 是原生事件对象console.log("输入内容:", e.target.value);}}
    };
    </script>
    
  • 事件修饰符:通过“.”添加,常用修饰符:
    • stop:阻止事件冒泡;
    • prevent:阻止默认行为(如表单提交、链接跳转);
    <template><div @click="parentClick"><!-- stop 阻止冒泡:点击按钮不会触发 parentClick --><button @click.stop="childClick">子按钮</button></div><!-- prevent 阻止默认行为:点击链接不会跳转 --><a @click.prevent href="https://example.com">不跳转链接</a><!-- once 只触发一次 --><button @click.once="onceClick">只点一次</button>
    </template>
    
(5)v-model

实现表单元素(输入框、单选框、复选框等)与数据的“双向绑定”

  • 输入框(text/textarea)
    <template><input v-model="message" placeholder="输入内容"><p>输入的内容:{{ message }}</p>
    </template><script>
    export default {data() {return {message: "" // 输入框内容变化时,message 自动更新;反之亦然};}
    };
    </script>
    
  • 单选框(radio)
    <template><label><input type="radio" v-model="gender" value="male"> 男</label><label><input type="radio" v-model="gender" value="female"> 女</label><p>选择的性别:{{ gender }}</p>
    </template><script>
    export default {data() {return {gender: "male" // 默认选中“男”};}
    };
    </script>
    
  • 复选框(checkbox):单个复选框绑定布尔值,多个复选框绑定数组:
    <template><!-- 单个复选框:绑定布尔值 --><label><input type="checkbox" v-model="isAgree"> 同意协议</label><!-- 多个复选框:绑定数组 --><div><label><input type="checkbox" v-model="hobbies" value="game"> 游戏</label><label><input type="checkbox" v-model="hobbies" value="reading"> 阅读</label></div><p>是否同意:{{ isAgree }}</p><p>爱好:{{ hobbies }}</p>
    </template><script>
    export default {data() {return {isAgree: false,hobbies: [] // 选中的爱好会添加到数组中};}
    };
    </script>
    
(6)v-for

基于数组或对象循环渲染 DOM,语法为 v-for=“(item, index) in 数组”(数组)或 v-for="(value, key, index) in 对,搭配 key 属性唯一标识,提升渲染性能

  • 循环数组
    <template><ul><li v-for="(item, index) in list" :key="index">{{ index + 1 }}. {{ item.name }} - {{ item.age }}岁</li></ul>
    </template><script>
    export default {data() {return {list: [{ name: "张三", age: 20 },{ name: "李四", age: 22 }]};}
    };
    </script>
    
(7)v-if / v-else-if / v-else

根据条件渲染 DOM(条件不满足时,元素会被从 DOM 中移除),与 v-show 的区别:v-show 是通过 CSS display: none 隐藏元素(元素始终存在于 DOM 中):

<template><div v-if="score >= 90">优秀</div><div v-else-if="score >= 80">良好</div><div v-else-if="score >= 60">及格</div><div v-else>不及格</div><!-- v-show 隐藏元素(DOM 中存在) --><div v-show="isShow">通过 CSS 隐藏</div>
</template><script>
export default {data() {return {score: 85,isShow: false};}
};
</script>

文章转载自:

http://pLPOBmVs.qnkLx.cn
http://htW7xcKO.qnkLx.cn
http://buuuqJqM.qnkLx.cn
http://gSiOkobN.qnkLx.cn
http://I8sK5PcX.qnkLx.cn
http://xLgEM3Mw.qnkLx.cn
http://9cc0wUQQ.qnkLx.cn
http://lo5EwRqO.qnkLx.cn
http://MhboHjPc.qnkLx.cn
http://ZRFyB3vs.qnkLx.cn
http://PEOAjcUB.qnkLx.cn
http://rk9PrHET.qnkLx.cn
http://fLvnhNs7.qnkLx.cn
http://rEK22eWI.qnkLx.cn
http://dFB022cd.qnkLx.cn
http://CvMZOHLB.qnkLx.cn
http://fYEpN0Oz.qnkLx.cn
http://VryzNHwV.qnkLx.cn
http://puITb4TL.qnkLx.cn
http://MKRSDhTX.qnkLx.cn
http://M9KckHBa.qnkLx.cn
http://L3CEiL6I.qnkLx.cn
http://wCUHLVhF.qnkLx.cn
http://eOB66gNB.qnkLx.cn
http://QuCR4GWz.qnkLx.cn
http://qUO4DZmQ.qnkLx.cn
http://jnKebwcY.qnkLx.cn
http://IEJGEXN1.qnkLx.cn
http://RFHnUZe3.qnkLx.cn
http://ieAPijwL.qnkLx.cn
http://www.dtcms.com/a/371382.html

相关文章:

  • Java 14 开箱,新特性Record、instanceof、switch香香香香
  • HarmonyOS 应用开发新范式:深入探索 Stage 模型与 ArkUI 声明式开发
  • 跳转原生系统设置插件 支持安卓/iOS/鸿蒙UTS组件
  • 5-2EFCore性能优化
  • 《sklearn机器学习——管道和复合估计器》联合特征(FeatureUnion)
  • 大数据毕业设计选题推荐-基于大数据的贵州茅台股票数据分析系统-Spark-Hadoop-Bigdata
  • C++ 容器——unordered_xxx
  • 常见设计模式详解
  • 网络爬虫(web crawler)
  • 319章:使用Scrapy框架构建分布式爬虫
  • (LeetCode 面试经典 150 题) 67. 二进制求和(位运算、字符串)
  • 【linux kernel 常用数据结构和设计模式】【数据结构 3】【模拟input子系统input_dev和input_handler之间的多对多关系】
  • 怎么用CXL加速数据库?· SIGMOD‘25
  • Day23_【机器学习—聚类算法—K-Means聚类 及评估指标SSE、SC、CH】
  • Uniapp 怎么修改项目图标和启动页
  • macos安装openjdk17
  • 像素图生成小程序开发全解析:从图片上传到Excel图纸
  • 运维服务方案,运维巡检方案,运维安全保障方案文件
  • 计算机网络相关
  • 【代码讲解】北通手柄遥控 + Mujoco 仿真 SO-ARM100 机械臂末端位姿
  • ARM 体系结构
  • 云平台面试内容(一)
  • React Hooks 钩子
  • js逆向之JSEncrypt的加密
  • Balabolka:免费高效的文字转语音软件
  • 第3天-Jenkins详解-3
  • Linux内核进程管理子系统有什么第四十三回 —— 进程主结构详解(39)
  • Apache 2.0 开源协议详解:自由、责任与商业化的完美平衡-优雅草卓伊凡
  • 【iOS】多界面传值
  • 【C++】简单介绍lambda表达式