字节跳动抖音本地生活前端招聘

news2024/11/17 16:31:57

一、认识Typescript

(1)Javascript是一种动态类型的弱类型语言

Javascript超集: A.包含与兼容所有JS特性,支持共存 B.支持渐进式引入与升级

(2)TypeScript是一种静态类型的弱类型语言

静态类型的优点:

A.可读性增强:基于语法解析TSDoc,ide增强

B.可维护性增强:在编译阶段暴露大部分错误=>多人合作大型项目中,可以获得更好的稳定性和开发效率

(3)Typescript是Javascript的超集,具有可选的类型并可以编译成纯JS

二、Typescript优缺点

1、优点:

(1)增强代码的可维护性,尤其在大型项目开发中效果显著

(2)友好地在编译器提示错误,在编译阶段就能检查类型,发现大部分错误

(3)支持最新的JS的特性

(4)繁荣的生态圈,typescript被普遍使用,多种框架都支持,尤其是Vue3

2、缺点:

(1)插件库兼容不够完美 ​

(2)增加前期开发成本

三、运行Typescript

例如,创建一个test.ts文件,

(1)npm i -g typescript

tsc -v 查看tsc版本

tsc --init 初始化 使用命令:tsc test.ts ,可将TS文件转化为JS文件

(2)npm i -g ts-node 使用命令:ts-node test.ts 可以直接执行TS文件

(3)npm i -D tslib @types/node 如果(2)之后运行还会报错,就再安装(3)

四、基本类型

1、非Typescript新增类型

(1)boolean(布尔值)

// boolean
const isRight: boolean = true;
const isleft: boolean = false;
console.log(isRight, isleft);//true false 

(2)number(数字)

// number
let numberOne: number = 123;
let numberTwo: number = 999;
console.log(numberOne, numberTwo);//123 999 

(3)string(字符串)

// string
let yourName: string = 'baby',yourGender: string = 'female';
console.log(yourName, yourGender);//baby female
let adult: string = `your name is ${yourName},your sex is ${yourGender}`;//模板字符串
console.log(adult);//your name is baby,your sex is female
let another: string = "my name is " + yourName + "my gender is " + yourGender;//字符串拼接
console.log(another);//my name is babymy gender is female 

(4)Array(数组)

// Array
let isArray1: string[] = ['1', '2', '3'];//string[]
console.log(isArray1);//[ '1', '2', '3' ]
let isArray2: number[] = [1, 2, 3];//number[]
console.log(isArray2);//[ 1, 2, 3 ]
let isArray3: Array<number> = [1, 2, 3];//数组泛型:Array<number>
console.log(isArray3);//[ 1, 2, 3 ]
let isArray4: Array<string> = ['1', '2', '3'];//数组泛型:Array<string>
console.log(isArray4);//[ '1', '2', '3' ] 

(5)null

// null
const nl: null = null;
console.log(nl); 

(6)undefined

// undefined
const und: undefined = undefined;
console.log(und); 

默认情况下nullundefined是所有类型的子类型。 就是说你可以把 nullundefined赋值给number|string等类型的变量。

(7)Object(对象)

object表示非原始类型,也就是除numberstringbooleansymbolnullundefined之外的类型。使用object类型,就可以更好的表示像Object.create这样的API。

// 对象类型
let myObject:object = {};
​
// 非严格模式下,可以这样;严格模式下,myObject不能被重新赋值
myObject=undefined;
myObject=null;
​
// Object有用内置对象
let bigObject:Object = {};
bigObject=1;
bigObject='a'
bigObject=true
bigObject=undefined
bigObject=null
​
// 空对象类型
let emptyObject:{} = {};
emptyObject=1
emptyObject='a'
emptyObject=true
emptyObject=undefined
emptyObject=null 

(8)Function(函数)

// 函数
function add(x:number,y:number):number{//两个参数
    return x+y
}
function subtract(...number:number[]):number{//多个参数
    let sum=0;
    for(let i=0;i<number.length;i++) sum+=number[i]
    return sum;
}
const minus=function(x:number,y:number):number{//函数另一个表示方式
    return x-y
}
const multiply=function(x:number,y:number,z?:number):number{//三个参数
    return z?x*y*z:x*y
}
multiply(1,2)
function defaultFun(x: number, y: number=0): number {
    return x/y
} 
2、Typescript新增类型

(1)Tuple(元祖)

// Tuple(元祖):允许表示一个已知元素数量和类型的数组,各元素的类型不必相同
//定义myTuple的第一个元素只能是字符串,第二个只能是数字
let myTuple: [string, number];
myTuple = ['hello', 10]; // OK
// myTuple = [10, 'hello']; // error
​
//访问元素,当访问不存在的元素时,会报错
console.log(myTuple[0]);//hello
myTuple[0] = 'hello world';
console.log(myTuple);//[ 'hello world', 10 ] 

(2)enum(枚举类型)

普通枚举:

// enum(枚举类型):支持枚举值到枚举名的正反向映射
enum Operate {add = '+',mult = '*'
}
console.log(Operate['add'] === '+');//true
console.log(Operate['+'] === 'add');//false
let operation: Operate = Operate.add;
console.log(operation);//+
​
enum Mycolor {red, yellow, blue
}
console.log(Mycolor['red'] === 0);//true
console.log(Mycolor[0] === 'red');//true
let myCol: Mycolor = Mycolor.yellow;
let hisCol: string = Mycolor[1]
console.log(myCol, hisCol);//1 yellow
​
// 默认值
enum People {Linda = 1,Jhon,Lihua
}
let per: string = People[2];
console.log(per);//Jhon 

枚举类型的字符串枚举和常量枚举:

// 字符串枚举
enum Person {name = 'Lucky',age = 19,sex = 'female'
}
const pname: Person = Person.name,page: Person = Person.age;
console.log(pname, page);//Lucky 19
​
// 常量枚举
const enum Student {sname,sage,ssex
}
const student: Student[] = [Student.sname, Student.sage, Student.ssex];
console.log(student);//[ 0, 1, 2 ] 

(3)any(任意类型)

any:表示任意类型, 可以被任何类型分配,也可以分配给任何类型;任意类型,是所有类型的子类型

//把any类型分配给其他类型
let otherType1: any
let otherType2: any = otherType1;
let otherType3: unknown = otherType1;
let otherType4: void = otherType1;
​
let otherType5: undefined = otherType1;
let otherType6: null = otherType1;
let otherType7: number = otherType1;
let otherType8: string = otherType1;
let otherType9: boolean = otherType1;
// 报错:不能将类型“any”分配给类型“never”
// let val_never:never = val;
​
//把其他类型分配给any
otherType1 = 'hello';
otherType1 = 110;
otherType1 = true;
otherType1 = null;
otherType1 = undefined;
​
otherType1 = unknown;// 报错:“unknown”仅表示类型,但在此处却作为值使用
otherType1 = never;// 报错:“never”仅表示类型,但在此处却作为值使用
otherType1 = any;// 报错:“any”仅表示类型,但在此处却作为值使用
otherType1 = void;// 报错:应为表达式 

另外,any虽然可以代表任意类型,但是能不用就不要用,这是默认的代码规范问题.

(4)unknown

// 把unknown类型分配给其他类型
let myType: unknown;
let myType1: any = myType;
let myType2: unknown = myType;
let myType3: string = myType;//报错
let myType4: number = myType;//报错
let myType5: boolean = myType;//报错
let myType6: null = myType;//报错
let myType7: undefined = myType;//报错
​
// 把其他类型分配给unknown类型
myType = '';
myType = 0;
myType = true;
myType = undefined;
val = null;
​
myType = void;//报错
myType = any;//报错
myType = unknown;//报错
myType = never;//报错 

与any任意类型相比,因为unknown是未知类型,所以只能进行 ?, typeof, instanceof等有限操作.

(5)never

// never:是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)
// 返回never的函数必须存在无法达到的终点
function throwError(message: string): never {throw new Error(message);
}
// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {while (true) {}
} 

never类型表示的是那些永不存在的值的类型。 例如, never类型是那些会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never类型,当它们被永不为真的类型保护所约束时。

(6)interface(接口)

// 接口
const hisObj={
    name:'胡琴',
    age:19,
    sex:'boy'
}
hisObj.name='lucky'
​
// 具有一个和jisObj相同属性的对象
let p1:Object={
    name:'dog',
    age:20
}//这种方式不具有针对性
​
// (1)接口(具有针对性)
interface Children{
    name:string,
    age:number,
    sex:string
}
let pp1:Children={
    name:'dog',
    age:20,
    sex:'female'
}
​
// (2)函数接口
interface Push{
  (x:number,y:number):number
} 

另外,

interface Myobj {// 只读属性:约束属性不可在对象初始化外赋值readonly cardId: number;name: string;sex: 'male' | 'female';age: number;// 可选属性:定义该属性可以不存在hobby?: string;// 任意属性:约束属性都必须是该属性的子类型[key: string]: any;
}
​
// 对象类型
const obj: Myobj = {cardId: 2020213028,name: 'Lucky',sex: 'female',age: 19,hobby: 'reading'
}
​
// const o:Myobj={//报错:缺少name属性,hobby可缺省
//cardId:2020213026,
//sex:'female',
//age:18
// }
console.log(obj);
// {
//   cardId: 2020213028,
//   name: 'Lucky',
//   sex: 'female',
//   age: 19,
//   hobby: 'reading'
// }
console.log(obj.cardId);//2020213028
console.log(obj.shortcoming = 'Math');//Math
console.log(obj.cardId = 2020213026);//Cannot assign to 'cardId' because it is a read-only property.
​ 

\

最后

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97873.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux内存分配原理

Linux内存分配原理虚拟内存分区Linux内存分配时的maps文件brk()与sbrk()mmap()与munmap()mmap()munmap()内存分配过程更多资讯、知识&#xff0c;微信公众号搜索&#xff1a;“上官宏竹”。 虚拟内存分区 虚拟内存由于用途不同&#xff0c;分类也不尽相同&#xff0c;一般我们…

底层网络知识详解:从二层到三层-第6讲-交换机与VLAN:办公室太复杂,我要回学校

上一次,我们在宿舍里组建了一个本地的局域网LAN,可以愉快地玩游戏了。这是一个非常简单的场景,因为只有一台交换机,电脑数目很少。今天,让我们切换到一个稍微复杂一点的场景,办公室。 拓扑结构是怎么形成的? 我们常见到的办公室大多是一排排的桌子,每个桌子都有网口,…

C++11标准模板(STL)- 算法(std::minmax_element)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 返回范围内的最小元素和最…

非零基础自学Golang 第11章 文件操作 11.2 文件基本操作 11.2.1 文件创建与打开

非零基础自学Golang 文章目录非零基础自学Golang第11章 文件操作11.2 文件基本操作11.2.1 文件创建与打开第11章 文件操作 11.2 文件基本操作 在学习文件操作之前&#xff0c;我们先来了解一下Linux下的文件权限。 文件有三种权限&#xff0c;分别为读取、写入和执行&#x…

设计模式2 - 创建型模式

23种设计模式分析与见解开篇、UML、软件设计原则https://blog.csdn.net/lili40342/article/details/128358435创建型模式https://blog.csdn.net/lili40342/article/details/128358392结构型模式https://blog.csdn.net/lili40342/article/details/128358313行为型模式https://bl…

【MATLAB100个实用小技巧】——图形处理(67-75)

文章目录前言系列文章67. 图像的块操作68. 图形的过滤操作69. 图像的频率操作70. 函数变换71. RADON 函数变换72. 图像分析&#xff08;1&#xff09;73. 过滤图像74. 图像的区域处理75. 图像的颜色处置前言 &#x1f30f;MATLAB是一个功能强大的软件&#xff0c;我们可以利用M…

Mycat(3):mycat的安装

1、前言 使用mycat要安装JDK.不会的去看Linux里面的安装JDK的知识点&#xff0c;这是不再做说明 也可以直接使用yum install java-1.7.0-openjdk 因为mycat 基于jdk1.7开发的&#xff0c;所有最好安装jdk1.7的版本 重要说明&#xff1a; Mycat-server-1.6-release 版本发布的版…

手机技巧:苹果手机这8个实用小技巧

今天给大家大家分享苹果手机8个实用小技巧&#xff0c;你都会用吗&#xff1f; 1、快速搜索相机照片 相信大家的相册里的照片应该和我一样不说有几千张&#xff0c;几百张总是有的&#xff0c;有时候想找照片&#xff0c;又不想一张一张找怎么办&#xff1f;很简单&#xff0c…

Docker配置从私有仓库拉取镜像

修改Docker配置文件 修改docker的配置文件daemon.json&#xff0c;如果配置文件不存在则直接创建。 vim /etc/docker/daemon.json文件内容如下&#xff0c;其中insecure-registries属性值“registry.luntek-inc.com”代表私有仓库的地址&#xff0c;你需要将registry.luntek-…

JavaSE13-方法

目录 1.方法的基本用法 1.1.什么是方法 1.2.方法定义语法 1.3.方法调用的执行过程 1.4.实参和形参的关系 1.5.方法的返回值 2.方法重载 2.1.方法重载定义 2.2.代码示例 3.方法递归 3.1.方法递归定义 3.2.方法递归使用条件 3.3.递归与非递归优劣比较 3.4.递归执行…

[附源码]Nodejs计算机毕业设计基于网络C++实验管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

SpringBoot+Vue项目部门人事管理系统的设计与实现

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

Vit 中的 Token 改进版本:Token Mreging: Your Vit But Faster 论文阅读笔记

Vit 中的 Token 改进版本&#xff1a;Token Mreging: Your Vit But Faster 论文阅读笔记一、Abstract二、引言三、相关工作3.1 有效的 Transformer3.2 Token 的减少3.3 Token 的联合四、Token 融合4.1 策略4.2 Token 相似性4.3 双边软匹配4.4 追踪 Token 的尺寸4.5 采用融合操作…

[附源码]计算机毕业设计Python餐馆点餐管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

非零基础自学Golang 第11章 文件操作 11.3 处理JSON文件 11.3.2 解码JSON 11.4 小结

非零基础自学Golang 文章目录非零基础自学Golang第11章 文件操作11.3 处理JSON文件11.3.2 解码JSON11.4 小结第11章 文件操作 11.3 处理JSON文件 11.3.2 解码JSON 解码JSON会使用到Unmarshal接口&#xff0c;也就是Marshal的反操作。 func Unmarshal(data []byte, v interf…

30岁零基础没学历学Python怎么样?30岁学习Python晚吗?

30岁零基础没学历学Python怎么样&#xff1f;30岁学习Python晚吗&#xff1f;任何时候开始都不晚。30岁开始学习Python听起来年纪有点大&#xff0c;大家认为编程上了年纪学习编程语言是一个劣势。想在三十岁的时候通过学习Python来谋求一份IT程序员工作&#xff0c;则需要有一…

SQL笔记

SQL笔记 基本概述 数据库&#xff1a;保存有组织的数据的容器&#xff08;通常是一个文件或一组文件&#xff09;。容易混淆&#xff1a;人们通常用数据库这个术语来代表他们使用的数据库软件&#xff0c;这是不正确的&#xff0c;也因此产生了许多混淆。确切地说&#xff0c…

抖音关键词排名优化技巧,手把手教你怎样优化抖音关键词

云南百收科技有限公司 1、标题中出现关键词是关键词排名靠前的基础。 一篇文章中标题中一定要出现你想做的关键词&#xff0c;因为搜索引擎是是匹配标题的&#xff0c;如果你标题中没有关键词&#xff0c;是不会有排名的。而且还有一点&#xff0c;关键词的位置要靠近标题最前面…

python+pyqt5+mysql设计图书管理系统(1)- 数据库

一、概述 前面学习了python,pyqt和mysql的一些基础知识,接下来运用学习的东西进行实操制作一个项目--图书管理系统。 项目介绍:图书管理系统对于我们的图书管理来说非常重要,管理图书者可以通过系统有效的管理书籍,用户可以通过系统快速有效的找到自己需要的书籍。相比人工…

【目标跟踪】Kalman滤波目标跟踪【含Matlab源码 388期】

⛄一、获取代码方式 获取代码方式1&#xff1a; 通过订阅紫极神光博客付费专栏&#xff0c;凭支付凭证&#xff0c;私信博主&#xff0c;可获得此代码。 获取代码方式2&#xff1a; 完整代码已上传我的资源&#xff1a;【目标跟踪】基于matlab Kalman滤波目标跟踪【含Matlab源…