笔记。看到34min。任务排期到7.30 冲啊。
- this类型
- 索引类型: 索引类型查询操作符 、索引访问操作符
- 映射类型: 基础 由映射类型进行推断 增加或移除特定修饰符 keyof和映射类型在2.9的升级 元组和数组上的映射类型
- 条件类型: 基础 分布式条件类型 条件类型的类型推断-infer TS预定条件类型
// 一、 this
class Counter {
constructor(public count: number = 0) {}
add(value: number) {
this.count += value
return this
}
subtract(value: number) {
this.count -= value
return this
}
}
let counter1 = new Counter(10)
console.log(counter1.add(3).subtract(2))
class PowCounter extends Counter {
constructor(public count: number = 0) {
super(count)
}
pow(value: number) {
this.count = this.count ** value // ES7 幂运算符
return this
}
}
let powCounter = new PowCounter(2)
console.log(powCounter.pow(8).add(3))
// 二、索引类型
// 1.索引类型查询操作符 keyof
interface Infoo {
name: string
age: number
}
let infoProp: keyof Infoo
infoProp = 'name'
// infoProp = 'sex' 报错
function getValue<T, K extends keyof T>(obj: T, names: K[]) {
return names.map(n => obj[n])
}
const infoObj = {
name: 'dan',
age: 111,
sex: 'wo',
constellation: 'Aries'
}
let val: (string | number)[] = getValue(infoObj, ['age', 'name'])
console.log(val)
// 2.索引访问操作符 []
type NameTypes = Infoo['name']
function getProperty<T, K extends keyof T>(o: T, name: K): T[K] {
return o[name]
}
interface Objs<T> {
[key: string]: T
}
const objs1: Objs<number> = {
age: 8
}
let keys: keyof Objs<number>
let keys2: Objs<number>['name']
interface Type {
a: never
b: never
c: string
d: number
e: undefined
f: null
g: object
}
type Test = Type[keyof Type]
// 三、映射类型
interface Info1 {
age: number
name: string
sex: string
}
type ReadonlyType<T> = { // 映射类型
readonly [P in keyof T]?: T[P] // ?可选属性
}
type ReadonlyInfo1 = ReadonlyType<Info1>
let info8: ReadonlyInfo1 = {
age: 11,
name: 'd'
}
// info8.age = 33 readonly不可改
// 5个内置映射类型
// Readonly(只读的) Partial(?可选的) Required(-?)
// Pick(从一个复合类型中,取出几个想要的类型的组合)
// Record(将一个类型的所有属性值都映射到另一个类型上并创造一个新的类型)
// type Pick<T, K extends keyof T> = { // 源码 => lib.es5.d.ts
// [P in K]: T[P]
// }
interface Info9 {
name: string
age: number
address: string
}
const info9: Info9 = {
name: 'vv',
age: 99,
address: 'sh'
}
function pick<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {
const res: any = {}
keys.map(key => {
res[key] = obj[key]
})
return res
}
const nameAndAddress = pick(info9, ['name', 'age'])
这节课97min,今天听不完,留坑。
困得一比。什么时候才能找回我的睡眠。