Ts 基础
838字约3分钟
2025-02-21
TypeScript与JavaScript的区别
- TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法,增加了类型系统和其他面向对象的特性。
- TypeScript 是静态类型语言,可以在编译时进行类型检查,而 JavaScript 是动态类型语言,类型检查是在运行时进行的。
- TypeScript 支持面向对象编程的特性,如类、接口、继承等,而 JavaScript 是一种基于原型的语言。
总结: 建议多使用ts,虽然写起来相对js麻烦,但是相较于稳定性和可维护性,ts的优势是显而易见的。
TypeScript 的类型系统
相比JavaScript,TypeScript 增加了很多类型系统,如:基本类型、联合类型、交叉类型、类型别名、接口、枚举、泛型等。
1.基本类型
let str: string = 'hello'
let num: number = 123
let bool: boolean = true
let u: undefined = undefined
let n: null = null
let sym: symbol = Symbol('sym')
let big: bigint = 123
2.联合类型
let a: string | number = 123
a = 'hello'
3.交叉类型
interface A {
name: string
}
interface B {
age: number
}
let c: A & B = { name: 'hello', age: 123 }
4.类型别名
type A = string | number
let b: A = 123
5.接口
interface A {
name: string
age: number
}
let b: A = { name: 'hello', age: 123 }
6.枚举
enum A {
a,
b,
c
}
let b: A = A.a
7.泛型
function A<T>(a: T): T {
return a
}
let b = A<string>('hello')
TypeScript 中关键字
keyof
使用
- 获取一个类型的所有键,返回一个联合类型
interface A {
name: string
age: number
}
type B = keyof A // 'name' | 'age'
typeof
使用
- 获取一个变量的类型
let a = 'hello'
let b: typeof a = 'hello'
in
使用
type A = 'name' | 'age'
type B = {
[key in A]: number
}
let c: B = { name: 123, age: 123 }
extends
使用
- 用于泛型约束
type A = 'name' | 'age'
type B = {
[key in A]: number
}
type C<T> = T extends 'name' ? string : number
let d: C<'name'> = 'hello'
let e: C<'age'> = 123
Omit
使用
- 剔除类型中的某些属性
interface A {
name: string
age: number
}
type B = Omit<A, 'age'>
let c: B = { name: 'hello' }
Partial
使用
- 将类型中的所有属性变为可选
interface A {
name: string
age: number
}
type B = Partial<A>
let c: B = { name: 'hello' }
Record
使用
- 将一个类型的所有属性变为另一个类型
type A = 'name' | 'age'
type B = Record<A, number>
let c: B = { name: 123, age: 123 }
Pick
使用
- 从一个类型中选取一些属性
interface A {
name: string
age: number
}
type B = Pick<A, 'name'>
let c: B = { name: 'hello' }
Exclude
使用
- 从一个类型中排除一些属性
type A = 'name' | 'age' | 'gender'
type B = Exclude<A, 'age'>
let c: B = 'name' | 'gender'
ReturnType
使用
- 获取函数的返回类型
function A() {
return 'hello'
}
type B = ReturnType<typeof A>
let c: B = 'hello'
InstanceType
使用
- 获取构造函数的实例类型
class A {
name: string
constructor(name: string) {
this.name = name
}
}
type B = InstanceType<typeof A>
let c: B = new A('hello')
NonNullable
使用
- 从一个类型中排除 null 和 undefined
type A = string | number | null | undefined
type B = NonNullable<A>
let c: B = 'hello'
Parameters
使用
- 获取函数的参数类型
function A(a: string, b: number) {
return a + b
}
type B = Parameters<typeof A>
let c: B = ['hello', 123]
Required
使用
- 将类型中的所有属性变为必选
interface A {
name?: string
age?: number
}
type B = Required<A>
let c: B = { name: 'hello', age: 123 }
TypeScript 的类型断言
类型断言用于告诉编译器变量的类型,从而避免类型检查错误。
// 第一种写法
let a: any = 'hello'
let b: string = a as string
// 第二种写法
let a: any = 'hello'
let b: string = <string>a