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
类型相同。null
和undefined
:分别表示 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 可以是字符串或数字类型。