这是我参与「第五届青训营 」笔记创作活动的第5天。活动详情:# 伴学笔记创作活动来袭 | 第五届字节跳动青训营
TypeScript 是 JavaScript 的语法超集,它添加了静态类型,近几年的发展中,也受到诸多开发者的喜爱。Typescript 的社区逐渐壮大,日趋完善,为越来越多前端开发者提供服务。
TypeScript
为什么是TypeScript? 静态类型:可读性增强 可维护性增强
- 编译是否发生在执行时 动态类型/静态类型
- 不同类型在运算时是否能够自动转换 弱类型语言/强类型语言
基础数据类型:
const q:string='string';/*定义字符串*/
const w:number=1;/*定义数字*/
const e:boolean=true';/*定义布尔值*/
const r:null=null;/*null*/
const t:undefined=undefined;/*undefined*/
对象数据类型:
/*通常在类型前加I以区分其和对象*/
interface IBytendancer{
readonly jobId:number;/*只读属性:不可在对象初始化外赋值*/
name:string;
sex:'man'|'woman'|'other';
age:number;
hobby?:string;/*可选属性:该属性可以不存在*/
[key:string]:any;/*约束所有对象属性都必须是该类型的子属性*/
/*类型补充 any:一种任意属性*/
}
函数类型:
/*定义一个函数类型并将其赋值给变量*/
interface IMult{
(x:number,y:number):number;
}
const mult:IMult=(x,y)=>x*y;
/* 函数可进行重载
timestamp为可缺省参数*/
数组类型:
type IArr1=number[];/*类型+方括号*/
type IArr2=Array<string|number|Record<string,number>>;/*泛型表示*/
type IArr3=[number,number,string,string];/*元组表示*/
/*接口表示*/
interface IArr4{
[Key:number]:any;
}
泛型:
/*不预先指定数据的类型,而是在使用的时候进行指定*/
type IGetRepeatArrR=<T>(target:T)=>T[];
interface IX<T,U>{/*泛型接口 多泛型*/
key:T;
val:U;
}
class IMan<T>{/*泛型类*/
instance:T;
}
type ITypeArr<T>=Array<T>/*泛型别名*/
其他知识点:泛型约束 泛型默认类型 类型断言
JS实践
代码实践1 - 交通灯
- 将数据抽象成为状态列表
- 使用递归的方式进行循环
代码实践2 - 洗牌
- 判断一个数是否为2的幂:其二进制表示形式中是否只有一个1
- 判断一个数是否为4的幂:在其为2的幂的基础上,是否表示形式中有偶数个0;
- a&a-1:将a二进制转换后最低位的1除去
- 转换为字符串 使用正则表达式进行筛选判断
代码实践3 - 分红包
- 切西瓜法