TypeScript(基础类型和高级类型)

目录

前言

一、JavaScript 与 TypeScript 的区别

二、基础类型

​编辑

1.布尔类型

2.数值类型

3.大数值类型

4.字符串类型

5.数组类型

6. null和undefined类型

7.any类型(不建议使用)

8.unknown类型

9.元组类型Tuple

10. void类型

11.字面量类型

三、高级类型

1.联合类型

2.交叉类型

3.可选类型

4.条件类型

5.映射类型


前言

          TypeScript 是 JavaScript 的一个超集,支持 ES6 标准。

          TypeScript 由微软开发的编程语言。

          TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。


一、JavaScript 与 TypeScript 的区别

        TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法,因此现有的 JavaScript 代码可与 TypeScript 一起工作无需任何修改,TypeScript 通过类型注解提供编译时的静态类型检查                                       

      JavaScript 中操作的都是数据,TypeScript 中类型系统操作是类型,JavaScript 和TypeScript 中很多操作是类型,只是操作对象不一样

二、基础类型

1.布尔类型

ts:

// boolean
var flag: boolean = true;

2.数值类型

ts:

// number
var age: number = 18;

3.大数值类型

ts:

// bigint
var moneny: bigint=1000000000000000n

4.字符串类型

ts:

// string
var msg: string = "jay";
msg = "joLin";

5.数组类型

ts:

// array
// 方式一:数组元素类型[]
// 方式二:Array<数组元素类型>
var arr: number[] = [1, 2, 3, 4, 5, 6];
// 该方式功能很强大
var arr1: Array<string> = ["你好", "hi", "hello"];

6. null和undefined类型

ts:

let n: null = null;
let u: undefined = undefined;
console.log(n, u);

7.any类型(不建议使用)

ts:

// any
let a: any = 123;
a = "hhhhhhh";
a = true;
console.log(a);

8.unknown类型

ts:

// unknown
// 是any的安全类型
// 可以把unknown类型变量的值赋值给有效的值
var value: unknown;
value = 1;
value = "jay";
value = true;
value = [];
value = {};
var value1: unknown = value;
var value2: any = value;




// 不可以吧unknown类型赋值给具体的类型
// var  value2:string = value

9.元组类型Tuple

ts:

// 元组类型Tuple
// 类似于数组但是里面的元素可以是不同类型的
let tp: [string, number, string, string[]] = [
  "jay",
  18,
  "man",
  ["music", "joLin"],
];
console.log(tp);

10. void类型

ts:

// void类型
// 他表示没有任何类型,如果一个函数没有返回值,就可以使用void
function fn(): void {
  var name = "jay";
  console.log(name);
  // return name //报错
}
fn();

11.字面量类型

ts:

// 字面量类型
// 通常和联合一起使用,表示类型或的关系
type EventType = "click" | "change";
var ev: EventType = "click";
document.body.addEventListener(ev, function () {});

三、高级类型

1.联合类型

ts:

// 就是js中的短路
// 要么是a类型的属性或方法要么是b类型的属性或方法两者取其一
function getNum(a: number | string, b: number | string) {
  // 字符串拼接
  return "" + a + b;
  // 加法运算
  // return +a + +b;
}
console.log(getNum(5, 9));
console.log(getNum("5", "你好"));

编译成js:

// 就是js中的短路
// 要么是a类型的属性或方法要么是b类型的属性或方法两者取其一
function getNum(a, b) {
    // 字符串拼接
    return "" + a + b;
    // 加法运算
    // return +a + +b;
}
console.log(getNum(5, 9));
console.log(getNum("5", "你好"));

2.交叉类型

ts:

// 交叉类型
// 就是数学里的并集
// 既有a类型属性或方法也有b类型的属性或方法
interface IUser {
  id: number;
  name: string;
}
interface IInfo {
  score: number;
}
var user: IInfo & IUser = {
  score: 89,
  name: "jay",
  id: 2022230567,
};
console.log(user);
console.log(user.score);
console.log(user.name);
console.log(user.id);

编译成js:

var user = {
    score: 89,
    name: "jay",
    id: 2022230567,
};
console.log(user);
console.log(user.score);
console.log(user.name);
console.log(user.id);

3.可选类型

ts:

// 可选类型
// 使用工具类型中的Partial让对象的类型变成可选的
interface IStudent{
  id:number
  name:string
  // 可选
  score?:number
}
// 让对象中所有类型都变成可选
var user2 :Partial<IStudent>={
  name: "jay",
}
console.log(user2);

编译成js:

var user2 = {
    name: "jay",
};
console.log(user2);

4.条件类型

ts:

// 条件类型
// 相当于js中的三元表达式/三目表达式,只不过求得是类型
interface a {
  name1: string;
}
interface b {
  name2: number;
}
interface c {
  name3: boolean;
}
// 如果n等于a那么类型为b,否则为c
type T<n> = n extends a ? b : c;
var tn: T<a> = {
  name2: 123,
};
var tn2: T<b> = {
  name3: true,
};

编译成js:

var tn = {
    name2: 123,
};
var tn2 = {
    name3: true,
};

5.映射类型

{[P in K]:T}                               拷贝

{[P in K]?:T}                             可选

{[P in K]-?:T}                            必填

{readonly [P in K]:T}                只读

{readonly [P in K]?:T}              只读可选

{-readonly [P in K]?:T}             可选

-?                                                改为必填的
?                                                 可选的

ts:

//映射类型
// 其实就是把一个对象属性的类型处理成另一种对象的属性的类型,他们是一一对应的关系
type User = {
  name?: string;
  location: string;
  age?: number;
};
// keyof User=>name | location | age
// P in keyof User : P是一个类型变量,判断是否属于name | location | age 三个属性中的一个
type MyPartial<T> = {
  // [P in keyof T]-?:T[P]
  [P in keyof T]?: T[P];
};


谢谢观看如果有问题麻烦指出~点个赞吧❤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值