青训营前端day09_TypeScript

20 阅读2分钟

TS和JS

相同点

  • TS 是基于 JS 的超集,拥有 JS 所有的语法和特性。因此,JS 的代码可以轻松地转换成 TS 代码。
  • TS 和 JS 都可以在浏览器和服务器端运行,适用于前端和后端开发。
  • TS 和 JS 都有强大的生态系统和社区支持,可以使用大量的开源库和工具来简化开发工作。

不同点

  • 类型系统:TS 是一种带有静态类型检查的编程语言,而 JS 是一种动态类型语言。TS 强制在编写代码时定义变量类型,这有助于提高代码的可读性和可维护性,同时减少类型错误的出现。
  • 编译:TS 代码需要经过编译器的编译才能转换成 JS 代码。TS 编译器会将 TS 代码转换成 ES5 或 ES6 JavaScript 代码,使得 TS 代码可以在任何支持 JS 的平台上运行。
  • 语法:TS 是 JS 的超集,它包含了所有 JS 的语法,同时也有一些额外的语法和特性,如类型注解、类和接口等。
  • 生态系统:JS 拥有庞大的生态系统和社区支持,可以轻松找到大量的开源库和工具。TS 也在不断发展壮大,并拥有越来越多的开源库和工具支持。

TS基础

基础类型

  • number:表示数值类型,包括整数和浮点数,与 JavaScript 中的 number 类型相同。
  • string:表示字符串类型,与 JavaScript 中的 string 类型相同。
  • boolean:表示布尔类型,与 JavaScript 中的 boolean 类型相同。
  • nullundefined:分别表示 null 和 undefined 类型,与 JavaScript 中的这两种类型相同。
  • symbol:表示唯一的标识符,与 JavaScript 中的 symbol 类型相同。
  • void:表示没有返回值的函数类型,与 JavaScript 中的 undefined 类型相同。
  • any:表示任意类型,可以赋值为任何类型的值,相当于 JavaScript 中的 Object 类型。

TS进阶

  • 联合类型
let value: string | number;
value = "hello";
value = 10;
  • 交叉类型
interface A {
  a: string;
}
interface B {
  b: number;
}
let value: A & B;
value = { a: "hello", b: 10 };
  • 类型断言
let value: any = "hello";
let length1: number = (<string>value).length;
let length2: number = (value as string).length;

变量 value 的类型为 any,但是可以通过类型断言将其断言为 string 类型,然后获取字符串的长度。

  • 类型别名
type UserID = string | number;
function getUserByID(id: UserID): User {
  // ...
}

UserID 是一个类型别名,它表示用户的 ID 可以是字符串或数字类型。