typeScript(二)
变量和数据类型
一、什么是变量
二、变量的使用
2.1 基本使用--2步走
let age: number;
age = 18
- 使用等号(=)来给变量 age 赋值。
2.2 简化形式
- 声明变量的同时就赋值(变量的初始化):
let age: number = 18
变量的使用总结:
- 变量的两种使用方式:1 先声明后赋值 2 声明的同时并赋值(推荐)
- 第一种:先声明后赋值
// 1 声明变量并指定类型let age: number
// 2 赋值
age = 18
let age: number = 18
三、 类型注解
3.1 什么是类型注解
接下来我们来看一下typescript中的类型注解。什么是类型注解呢?其实我们在前面已经用过了,我们来看一句示例代码:
let age: number = 18
3.2 作用
// 程序员 和 TS 约定:变量 age 的类型为 number(数值类型)
let age: number = 18
// × 错误演示
age = 'Hello TS'
四、 变量的命名规范
4.1 变量的命名规则
- 变量名称只能出现:数字、字母、下划线(_)、美元符号($),并且不能以 数字 开头。
let age: number = 18
let 2b ×
let $name ✅
let first_name ✅
let @email ×
// age 和 Age 是两个不同的变量let age: number = 18let Age: number = 20
4.2 变量的命名规范
- 代码就是程序员的脸面,规范的代码,能让人觉得专业、优雅。
- 推荐:变量名称要有意义,顾名思义。
// 有意义,推荐
let age: number = 18
// 无意义,不推荐
let a: number = 18
- 推荐:使用驼峰命名法(首字母小写,后面每个单词首字母大写)。
let cityName
let yourAge
总结:
规则:变量名称只能出现 数字、字母、下划线(_)、美元符号($),并且不能以 数字 开头。
注意:变量名称区分大小写。
规范:变量名称要有意义,顾名思义。
推荐:使用驼峰命名法(首字母小写,后面每个单词首字母大写)。
交换变量的值
需求:交换两个变量的值(提示:借助于第三个变量)。
// 变量1:
let num1: number = 33
// 变量2:
let num2: number = 2
// 目标:
num1 的值为2,num2 的值为33。
五、数据类型概述
- lTypeScript 中的数据类型分为两大类:1 原始类型(基本数据类型) 2 对象类型(复杂数据类型)。
- 常用的基本数据类型有 5 个:number / string / boolean / undefined / null。
// 变量 age 的类型是 number(数字类型)
let age: number = 18
// 此处的 'Hello TS' 是 string(字符串类型)console.log('Hello TS')
六、 基本数据类型
6.1 数字类型
- 数字类型:包含整数值和浮点型(小数)值。
// 数字类型:整数
let age: number = 18
// 数字类型:小数
let score: number = 99.9
- 当然,从另一个维度来看,也可以包含:正数和负数。
// 正数,+直接省略即可
let salary: number = +10000
// 负数
let salaryWithGirlfriend: number = -2000
6.2 字符串类型
- 字符串:由零个或多个字符串联而成的,用来表示文本信息。
console.log('Hello TS')
console.log('') // 空字符串
- 字符串可以使用单引号(')或双引号("),推荐:使用单引号。
'Hello TS' // 推荐
"Hello TS"
- 字符串类型的类型注解为:string,声明变量时要添加类型注解
let food: string = '糖葫芦'
6.3 布尔类型
- 布尔类型的类型注解为:boolean 。
// 真
let isStudying: boolean = true
// 假
let isPlayingGame: boolean = false
6.4 undefined、null
// 类型注解为:
undefined let u: undefined = undefined
// 类型注解为:
null let n: null = null
- undefined:表示声明但未赋值的变量值(找不到值)。
let u: undefined
console.log(u) // 变量u的值为 undefined
- null:表示声明了变量并已赋值,值为 null(能找到,值就是 null)。
总结
- TypeScript 中常用的基本数据类型有 5 个。
- 分别是:number(数字类型)/ string(字符串类型)/ boolean(布尔类型)/ undefined /null。
- 重点是:number / string / boolean。
18 // 数字字面量
'保温杯里泡枸杞' // 字符串字面量true / false // 布尔字面量
undefined
null
运算符
一、运算符概述--5种
- 算术运算符 。加减乘除呀,这我们已经知道了。
- 赋值运算符 。赋值运算符我们在前面已经用过了,当然我们一会还会看一下。
- 递增/递减运算符 。这个在我们学习typescript到现在还没用过,待会也会详细讲解。
- 比较运算符 。比较就是大于呀,小于呀,我们也要做了解的。
- 逻辑运算符
二、 算术运算符
2.1 概述
算术运算符包含:加(+)、减(-)、乘(*)、除(/)。
算术运算符:它是进行算术运算时使用的符号,用于两个数值之间的计算。
// 加
console.log(1 + 2) // 3 // 减
console.log(2 - 1) // 1 // 乘
console.log(2 * 3) // 6 // 除
console.log(4 / 2) // 2
2.2 加号的其他作用
注意:+ 号,不仅可以用于加法计算,还能实现字符串拼接。 我们到代码中体验一下:
// 字符串拼接(拼串)
console.log('周杰' + '伦') // 结果为:'周杰伦'
console.log(1 + 2) // 结果为:3
console.log(1 + '2') // 结果为:'12'
console.log('1' + 2) // 结果为:'12'
2.3 加号引发的思考
思考一下:既然加号可以跟字符串一起使用,那其他算术运算符(- * /)可以吗? 我们可以检验一下:
console.log(2 - '1') // 报错:算术运算符的右侧必须是数字类型。
console.log(2 - +'1')
// +'1' 表示将 '1'(string) => 1(number)
// 所以,2 - +'1' ==> 2 - 1 ==> 结果为:1
- 记住:在字符串前面添加 + 号,可以将 string 转化为 number(字符串内容为数字时才有意义)。
三、赋值运算符
赋值运算符:将等号右边的值赋值给它左边的变量,比如:等号(=)。
// 等号:将 18 赋值给左侧的变量age let age: number = 18
age = age + 1
age += 1
四、 自增和自减运算符
let age: number = 18
age += 1 // 加等
age++
五、比较运算符
比如:考完试,拿到成绩后,比较分数。
你的100分 大于 同桌的99分
比较运算符包含 6 个:
- 大于(>)
- 大于等于(>=)
- 小于(<)
- 小于等于(<=)
- 等于(===)
- 不等于(!==)
下面我们通过代码来理解比较运算符:
// 大于console.log(1 > 2) // 结果为:false
// 大于等于console.log(3 >= 2) // 结果为:true
// 小于
console.log(1 < 2) // 结果为:true
// 小于等于console.log(3 <= 2) // 结果为:false
// 相等
console.log(3 === 4) // 结果为:false
// 不相等
console.log(3 !== 4) // 结果为:true
六、逻辑运算符
- 与(逻辑与),用 && 符号来表示。当 && 两边的值同时为true,结果才为true;否则,为false。
true && false // 结果为:false
示例:
// 与
console.log(2 > 1 && 2 >= 2)
// 结果为:true
- 或(逻辑或),用 || 符号来表示。当 || 两边的值只要有一个为true,结果就为true;否则,为false。
true || false // 结果为:true
示例:
// 或
console.log(3 < 2 || 1 <= 2)
// 结果为:true
- 非(逻辑非),符号为 !(叹号),表示取反,即:truefalse 而 falsetrue。
!true // 结果为:false
示例:
// 非
console.log(!false || false) 示例: // 结果为:true
- 两个条件同时满足时,再执行操作,用什么? 逻辑与 &&
- 只要有一个条件满足时,就执行操作,用什么? 逻辑或 ||
- 逻辑非,表示什么作用? 取反 !
TypeScript 语句
一、 条件语句
1.1 概述
- 如果是 Vip,就可以看完整电影;
- 如果不是 Vip,只能试看5分钟。
1.2 if 语句
- 如果 条件满足,就做某件事情(情况1)
- 如果 条件不满足,就做另外一件事情(情况2)
- if 语句的语法:
if (判断条件) {
条件满足时,要做的事情
}
- 判断条件:布尔类型(true 或 false)。
- 如果 判断条件 为真,就执行 要做的事情;
- 否则,如果判断条件为假,则不执行花括号中的代码。
1.3 else 语句
- else 语句的语法:
if (判断条件) {条件满足时,要做的事情} else {条件不满足,要做的事情}
- 否则,如果 判断条件 为假,就执行 条件不满足时要做的事情。
二、 三元运算符
结果 = 判断条件 ? 值1 : 值2
- 如果判断条件为真,结果为 值1;
- 否则,如果判断条件为假,结果为 值2。
三、 循环语句
3.1 概述
'北冥有鱼,其名为鲲。鲲之大,一锅装不下'
3.2 for 循环
- 第 1 遍:先判断遍数是否 <= 3(是);写作业;遍数 + 1(准备开始第2遍)。
- 第 2 遍:先判断遍数是否 <= 3(是);写作业;遍数 + 1(准备开始第3遍)。
- 第 3 遍:先判断遍数是否 <= 3(是);写作业;遍数 + 1(准备开始第4遍)。
- 第 4 遍:先判断遍数是否 <= 3(否);结束写作业。
3.3 for 循环的基本使用
- 语法:
for (初始化语句; 判断条件; 计数器更新) { 循环体
}
- 初始化语句:声明计数器变量,记录循环次数。
- 判断条件:判断循环次数是否达到目标次数。
- 计数器更新:计数器数量加1。
- 循环体:重复执行的代码,也就是要重复做的事情。
// 作业写 3 遍:
for (let i: number = 1; i <= 3; i++) {
console.log('北冥有鱼,其名为鲲。鲲之大,一锅装不下')
}
3.4 for 循环的执行过程
- 说明:红色表示当前执行的代码。
for (let i: number = 1; i <= 3; i++) {
console.log('...一锅装不下')
}
// 初始化计数器(i = 1) -- 只执行一次// 第 1 次: a 判断条件(1 <= 3)b 循环的代码->打印 c 计数器++(i变为2);
// 第 2 次: a 判断条件(2 <= 3)b 循环的代码->打印 c 计数器++(i变为3);
// 第 3 次: a 判断条件(3 <= 3)b 循环的代码->打印 c 计数器++(i变为4);
// 第 4 次: a 判断条件(4 <= 3),条件不满足,结束循环。
3.5 断点调试
3.6 break和continue
for (let i: number = 1; i <= 5; i++) { console.log('正在吃第' + i + '个包子')
}
for (let i: number = 1; i <= 5; i++) { if (i === 3) { break }console.log('正在吃第' + i + '个包子')
}
for (let i: number = 1; i <= 5; i++) { if (i === 3) { continue }console.log('正在吃第' + i + '个包子')
}
四、 断点调试
TypeScript 数组
一、 数组概述
let name1: string = '迪丽热巴'
let name1: string = '迪丽热巴'
let name2: string = '古力娜扎'
let name3: string = '马尔扎哈'
let names: string[] = ['迪丽热巴', '古力娜扎', '马尔扎哈']
let name1: string = '迪丽热巴'
let name2: string = '古力娜扎'
let name3: string = '马尔扎哈'
二、 创建数组---2种方式
- 语法一(推荐):
let names: string[] = []
let names: string[] = ['迪丽热巴', '古力娜扎', '马尔扎哈']
- 语法二(不推荐):
let names: string[] = new Array()
let names: string[] = []
let names: string[] = new Array('迪丽热巴', '古力娜扎', '马尔扎哈')
// 相当于:
let names: string[] = ['迪丽热巴', '古力娜扎', '马尔扎哈']
三、 数组长度和索引
3.1 概述
3.2 数组长度
let foods: string[] = ['煎饼', '馒头', '米饭']
console.log(foods.length) // 3
3.2 数组索引
数组中的每个元素都有自己的序号。
let foods: string[] = ['煎饼', '馒头', '米饭']
// 数组的索引分别为: 0 1 2
总结:
四、 取值和存值
4.1 取值
let foods: string[] = ['煎饼', '馒头', '米饭']
// 数组的索引分别为: 0 1 2
数组名称[索引]
比如,获取到最爱的食物 – 煎饼:
console.log(foods[0]) // 煎饼
4.2 存值
let foods: string[] = ['煎饼', '馒头', '米饭']// 数组的索引分别为: 0 1 2
数组名称[索引] = 新值
foods[1] = '包子'
console.log(foods) // ['煎饼', '包子', '米饭']
4.3 添加元素
存值的语法是:数组名称[索引] = 新值,根据索引是否存在,有两种功能:1 修改元素 2 添加元素。
let foods: string[] = ['煎饼', '馒头', '米饭']// 数组的索引分别为: 0 1 2
foods[1] = '包子'
foods[3] = '油泼面'
console.log(foods) // ['煎饼', '馒头', '米饭', '油泼面']
五、遍历数组
遍历数组,也就是把数组中的所有元素挨个获取一次(比如,计算数组中所有数字的和)。
let nums: number[] = [100, 200, 300]// 数组的索引分别为: 0 1 2
console.log(nums[0]) // 100
console.log(nums[1]) // 200
console.log(nums[2]) // 300
遍历数组,也就是把数组中的所有元素挨个获取一次(比如,计算数组中所有数字的和)。
let nums: number[] = [100, 200, 300]// 数组的索引分别为: 0 1 2
for (let i: number = 0; i <= nums.length - 1; i++) {
console.log(nums[i])}
for (let i: number = 0; i < nums.length; i++) {
console.log(nums[i])}
总结:
TypeScript 函数基础
一、 函数概述
let nums: number[] = [1, 3, 5]
let sum: number = 0
for (let i: number = 0; i < nums.length; i++) {
sum += nums[i]
}
console.log(sum)
let nums2: number[] = [2, 4, 6]
存在的问题:相似的代码重复写,代码冗余。
function getSum(nums: number[]) {
let sum: number = 0
for (let i: number = 0; i < nums.length; i++) {
sum += nums[i]
}
console.log(sum)
}
getSum(nums1) // 计算nums1中所有元素的和
getSum(nums2) // 计算nums2中所有元素的和
二、函数的使用
- 第一步:声明函数
function 函数名称() {
函数体
}
- 函数名称:推荐以动词开头,因为函数表示做一件事情,实现一个功能。
- 函数体:表示要实现功能的代码,复用的代码。
function sing() {
console.log('五环之歌')}
- 第二步:调用函数
函数名称()
比如,调用 sing 函数:
sing()
// 1 声明函数
function sing() {
console.log('五环之歌')
}
// 2 调用函数
sing()
三、函数参数
3.1 概述
function sing() {
console.log('五环之歌')
}
sing() // 五环之歌
sing() // 五环之歌
使用函数参数来实现:
// 调用函数时,告诉函数要唱的歌曲名称
sing('五环之歌')
sing('探清水河')
// 声明函数时,接收传入的歌曲名称
function sing(songName: string) {
console.log(songName)
}
3.2 形参和实参
function sing(songName: string) { }
- 语法:形参名称: 类型注解,类似于变量声明,但是没有赋值。
- 作用:指定函数可接收的数据。
sing('五环之歌')
- 实参是一个具体的值(比如:‘字符串’、18、[]等),用来赋值给形参。
- 声明函数时的参数,叫什么?作用? 形参,指定函数能够接收什么数据。
- 调用函数时的参数,叫什么?作用? 实参,是一个具体的值,用来赋值给形参。
function sing(songName: string) { }
sing('五环之歌')
3.3 其他说明
function fn(name: string, age: number) { }
fn('刘老师', 18)
function fn(name: string, age: number) { }fn('刘老师', 18) // name -> '刘老师', age -> 18
3. 实参必须符合形参的类型要求,否则会报错!
function sing(songName: string) {}
sing(18) // 报错! 形参要求是 string 类型,但是,实参是 number 类型。
- 函数形参是 string 类型,调用该函数时传入 18 对吗? 不对,因为实参不符合形参的类型要求
- 函数有多个参数时,多个参数之间用什么符号分隔? 逗号
- 以下代码会报错吗? 报错!因为函数sing要求有一个参数,但是没有传
function sing(songName: string) { }
sing() // 报错!
四、 函数返回值
4.1 概述
getSum([1, 3, 5]) // 9
getSum([10, 100, 1000]) // 1110
getSum([1, 3, 5]) + getSum([10, 100, 1000]) // 9 + 1110 => 1119
4.2 基本使用
function fn(): 类型注解 {
}
- 在声明函数的小括号后面,通过 : 类型注解 指定。
function fn(): number {
}
function fn(): 类型注解 {
return 返回值
}
- 在函数体中,使用 return 关键字来返回函数执行的结果。
function fn(): number {
return 18
}
- 注意:返回值必须符合返回值类型的类型要求,否则会报错!
let result: 类型注解 = fn()
let result: number = 18
console.log( fn() * 10 )
- 使用哪个关键字来指定返回值? return
- 以下代码是否正确? 错误!因为返回值18不符合返回值类型string的要求
function foo(): string {
return 18
}
- 如果函数(getSum)返回了数组中所有元素的和,以下代码表示什么?
getSum([1, 3, 5]) + getSum([10, 100, 1000])
4.3 return 的说明
function fn(): number {
return 18
console.log('我不会执行,放在这,没有意义')
}
function play(age: number): void {
if (age < 18) {
return
}
console.log('网吧上网好爽啊,王者、吃鸡两不误')
}
play(16) // 情况1:进入if后return,后续代码不执行
play(20) // 情况2:不进if,直接打印内容: 网吧上网好爽啊,王者、吃鸡两不误
function play(age: number) { /* ... */ }
return 的总结:
- 能否在函数外面使用 return? 不能
- return 后面不跟内容,单独使用,表示什么? 不会执行
- return 后面的代码会执行吗? 刻意终止函数代码执行
- 函数没有返回值,默认返回值类型是什么? void
函数基础总结
TypeScript 函数进阶
一、函数调试
1.1 基本操作
1.2 函数的执行过程
function work() {
console.log('早上9点开始工作')
play()
console.log('晚上6点结束工作')
}
function play() {
console.log('早上9:30开始吃鸡')
console.log('晚上5:30结束吃鸡')
}
work()
二、 变量作用域
- 局部变量:表示在函数内部声明的变量,该变量只能在函数内部使用(局部地区有雨)。
- 全局变量:表示在函数外部声明的变量,该变量在当前 ts 文件的任何地方都可以使用。
function fn() {
// 变量 num 是局部变量
let num: number = 1
console.log(num) // 此处能访问到变量 num
}
fn()
console.log(num) // 问题:此处能访问到变量 num 吗? 不能
// 变量 num 是全局变量
let num: number = 1
function fn() {
console.log(num) // 问题:此处能访问到变量 num 吗? 能
}
fn()
console.log(num) // 问题:此处能访问到变量 num 吗? 能
TypeScript 对象
一、对象概述
你的电脑:尺寸、重量、价格等
你的手机:品牌、屏幕大小、颜色等
古力娜扎:年龄、身高、三围等
你的电脑:浏览网页、写代码等
你的手机:播放视频、吃鸡等
古力娜扎:演电影、配音等
- 理解 TS 中的对象:一组相关属性和方法的集合,并且是无序的。
// 演示对象:
{
name: '周杰伦',
gender: '男',
height: 175,
sing: funtion () {
console.log('故事的小黄花 从出生那年就飘着')
}
}
let name: string = '周杰伦'
let gender: string = '男'
let height: number = 175
function sing() { ... }
['周杰伦', '男', 175, function sing() { ... }]
{ name: '周杰伦', gender: '男', height: 175, sing: function () { ... }}
二、 创建对象
let person = {}
let person = { name: '刘老师', age: 18 }
let person = {
sayHi: function () {
console.log('大家好,我是一个方法')}
}
- 使用什么符号创建对象? 花括号({})
- 键(key)、值(value)之间通过什么符号配对? 冒号(:)
- 多个属性或方法之间使用什么符号分隔? 逗号(,)
- 属性和方法的区别? 值是不是函数
三、接口
3.1 对象的类型注解
3.2 对象方法的类型注解
let person: {
sayHi: () => void
sing: (name: string) => void
sum: (num1: number, num2: number) => number
}
3.3 接口的使用
四、 取值和存值
4.1 取值
- 访问属性
let jay = { name: '周杰伦', height: 175 }
console.log(jay.name)
- 调用方法
let jay = {
sing: function () {
console.log('故事的小黄花 从出生那年就飘着')
}
}
jay.sing()
console.log(参数1, 参数2, ...)
console.log('我叫', jay.name)
总结:
4.2 存值
let jay = { name: '周杰伦', height: 175 }
jay.name = '周董'
console.log(jay.name) // 周董
总结:
五、内置对象
5.1 概述
5.2 学习方式 - 查文档
总结:
Web 开发
一、Web 开发基础
1.1 概述
- (结构)HTML 负责创建页面结构。
- (样式)CSS 负责美化页面结构(相当于化妆)。
- (行为)JavaScript 负责让页面“动”起来,解锁更多动效。
1.2 HTML
1.3 CSS
<p style="color: red; font-size: 50px;">天青色等烟雨 ...</p>
<style>
/* 标签选择器 */
p { color: red; }
</style>
/* 标签选择器 */
p { color: red; }
/* id 选择器 */
#txt { font-size: 50px; }
/* 类(名)选择器 –- 推荐 */
.cls { backgroud-color: pink; }
<link ref="stylesheet" href="./index.css" />
总结:
p { color: red; } /* 标签选择器 */
#txt { font-size: 50px; } /* id 选择器 */
.cls { backgroud-color: pink; } /* 类(名)选择器 –- 推荐 */
1.4 浏览器中使用 JavaScript
<script src="./index.js"></script>
1.5 自动刷新浏览器
二、浏览器中运行TS
<script src="./index.js"></script>
tsc --watch index.ts
三、 DOM 操作--2步走
3.1 概述
- 找人:获取 DOM 元素。
- 做事:设置样式、内容、绑定(解绑)事件。
document.title = '等你下课'
总结:
3.2 获取元素
- querySelector(selector) 作用:获取某一个 DOM 元素。
- querySelectorAll(selector) 作用:同时获取多个 DOM 元素。
document.querySelector(selector)
let title = document.querySelector('#title')
类型断言
值 as 更具体的类型
let img = document.querySelector('#image') as HTMLImageElement
// document.querySelector() 方法的返回值类型为: Element
// 如果是 h1 标签:
let title = document.querySelector('#title') as HTMLHeadingElement
// 如果是 img 标签:
let image = document.querySelector('#image') as HTMLImageElement
document.querySelectorAll(selector)
let list = document.querySelectorAll('.a')
3.3 操作文本内容
dom.innerText
dom.innerText = '等你下课'
dom.innerText = dom.innerText + ' – 周杰伦'
// 简化
dome.innerText += ' – 周杰伦'
3.4 操作样式
- dom.style 属性:行内样式操作,可以设置每一个样式属性(比如,字体大小、文字颜色等)。
- dom.classList 属性:类样式操作,也就是操作类名,比如,添加类名、移除类名等。
dom.style.样式名称
dom.style.样式名称 = 样式值
说明:所有的样式名称都与 CSS 相通,但命名规则为驼峰命名法。
dom.style.fontSize = '30px'
dom.style.display = 'none'
dom.classList.add(类名1, 类名2, ...)
<p class="a"></p>
dom.classList.add('b', 'c') // 添加 class 样式 ==> class="a b c"
dom.classList.remove(类名1, 类名2, ...)
<p class="a b c"></p>
dom.classList.remove('a', 'c') // 移除 class 样式 ==> class="b"
let has = dom.classList.contains(类名)
<p class="b"></p>
dom.classList.contains('a') // false
dom.classList.contains('b') // true
总结:
// 添加
dom.classList.add('a', 'b')
// 移除
dom.classList.remove('b', 'c')
// 判断是否存在
let has = dom.classList.contains('a')
3.5 操作事件
- addEventListener 添加(绑定)事件。
- removeEventListener 移除(解绑)事件。
1. addEventListener 添加事件
dom.addEventListener(事件名称, 事件处理程序)
btn.addEventListener('click', function () {
console.log('鼠标点击事件触发了')
})
btn.addEventListener('click', function (event) {
console.log(event.type)
// click
console.log(event.target)
// btn 元素
})
2. removeEventListener 移除事件
dom.removeEventListener(事件名称, 事件处理程序)
function handleClick() {}
btn.addEventListener('click', handleClick)
btn.removeEventListener('click', handleClick)
btn.addEventListener('click', function () {})
btn.removeEventListener('click', function () {})
btn.addEventListener('click', function () {}, { once: true })
移除事件总结:
function handleClick() {}
btn.addEventListener('click', handleClick)
btn.removeEventListener('click', handleClick)
btn.addEventListener('click', function () {}, { once: true })
函数声明形式的事件处理程序说明
btn.addEventListener('click', handleClick)
function handleClick() {}
// 1 先调用函数
fn()
// 2 再声明函数
function fn() {}
btn.addEventListener('click', handleClick)
function handleClick(event: MouseEvent) {
console.log(event.target)
}
总结:
btn.addEventListener('click', handleClick)
function handleClick() {}
fn() // 先调用函数
function fn() {} // 再声明函数
btn.addEventListener('click', handleClick)
function handleClick(event: MouseEvent) {}
typeScript(二)相关推荐
- Vue3+TypeScript从入门到进阶(六)——TypeScript知识点——附沿途学习案例及项目实战代码
文章目录 一.简介 二.Vue2和Vue3区别 三.Vue知识点学习 四.TypeScript知识点 一.JavaScript和TypeScript 二.TypeScript的安装和使用 1.Type ...
- 【实习日记】第五天 剖析源码+学习Node.js Typescript基本语法
国庆假期结束了,其实在这里实习对我而言还算是比较愉快的,虽然完成任务过程中出现的问题层出不穷,但也被克服问题的成就感包裹着,感觉每天在办公室就像在上自习一样.加油啦小荷! 自从把example运行成功 ...
- TS学习(二) :安装ts与ts配置
一.安装TypeScript npm i -g typescript 二.安装完成后 创建ts 使用ts语法 可能遇到的报错问题 在啥都没配置的默认情况下,TS会做出下面几种假设: 假设当前的执行环境 ...
- Typescript和Javascript之间的区别
目录 一.概要介绍 1.JavaScript 2.TypeScript 二.JavaScript 和 TypeScript 的主要差异 三.TypeScript 的优势 1. 静态输入 2. 大型的开 ...
- internal/modules/cjs/loader.js:883 throw err; ^Error: Cannot find module ‘typescript‘
一.问题 internal/modules/cjs/loader.js:883 throw err; ^Error: Cannot find module 'typescript' 二.全局已经安装, ...
- ApacheCN NodeJS 译文集 20211204 更新
Node API 开发入门指南 零.前言 一.Node.js 简介 二.构建 API--第 1 部分 三.构建 API--第 2 部分 React TypeScript Node 全栈开发 零.序言 ...
- 创建React + Ts项目
一.安装react+ts npx create-react-app my-app --template typescript 二.安装eslint代码检测 yarn eslint npx eslint ...
- 【技能】前端技能列表
一.基础 1. HTML 相关 2. CSS 相关 3. JavaScript 相关 类别 初级 高级 HTML HTML5 CSS CSS3 Less,Sass JS JavaScript ES6+ ...
- vue_2.0_fyf
vue2.0 学习笔记 vue框架的两大核心: 一.前端开发历史 1994年可以看做前端历史的起点(但是没有前端的叫法) 1995年网景推出了JavaScript 1996年微软推出了iframe标签 ...
- Vue笔记随笔---kalrry
Vue笔记随笔---kalrry VUE vue框架的两大核心: 一.前端开发历史 二.MV*模式 库 VS 框架 MVC架构模式 MVP架构模式 MVVM架构模式 vue是MVVM 三.开发工具 四 ...
最新文章
- [译]Javascript数列的push和pop方法
- 内核空间镜像攻击揭秘:ARM 硬件特性,竟能开启安卓8终端的上帝模式?
- Extjs 4.2 +Struts2 实现数据动态加载
- eeprom的wp 引脚_EEPROM存储芯片24C02
- 第一篇:容易遗忘的“枚举”
- python 文本处理 保留中英文和标点符号_问一下处理英文文本
- dos远程登录oracle,DOS批处理下 操作telnet实现自动远程登录操作
- oracle执行带有nbsp参数,Oracleamp;nbsp;参数文件amp;nbsp;spfileamp;nbsp;a
- iOS中__block 关键字的底层实现原理
- C# 中字符串string和字节数组byte[]的转换
- 洗头 Wet Hair
- 从达特茅斯会议到图灵奖---人工智能学习分享
- 当下的力量(解读版)
- CodeCademy | Python | 6. Pyglatin
- 在线引入 iconfont 特殊图标字体
- JS校验VIN码,生成虚拟VIN码
- Power BI可视化技巧:正负值配色
- java kryo register_kryo处理unmodifiedList报错问题
- [BLE]低功耗蓝牙介绍
- uefi装完系统后无法引导_uefi安装win10无法启动?uefi安装win10无法启动原因分析及解决方法...
热门文章
- java支付宝rsa2签名,使用支付宝SDK进行RSAj加签验签以及加密解密
- 基于神经网络的图像分割
- myeclispe 启动报错Location	Type Faceted project metadata file /farming/.settings/org.eclips
- 【Android】自己动手做个扫雷游戏
- 爬取上交所公司信息,根据公司股票代码获取公司注册地址以及地址的经纬度
- c语言自动贩卖机设计报告,自动贩卖机课程设计.doc
- Springboot旅游管理系统 08841计算机毕业设计-课程设计-期末作业-毕设程序代做
- 劳务员培训建筑八大员培训劳务员对劳务分包企业管理的建议
- 使用ESP8266通过Blinker平台接入天猫精灵控制电视/空调
- 团队管理:新业务团队如何结合绩效来度量开发目标