文章学习内容来自 方应杭 《TS全解》
No.13P && No.14P
1、 在一般情况下Ts的parmas检测并不严谨 返回值会检查但是 参数并不检查,同时参数可以给少但是不能给多。
const a :FnA = (并不需要参数也可以通过检查 )=>{ return 123 }
const a :FnA = (a:1,|| b:2 || c:3 X) => { return 123}
这样是无法通过的,因为类型中 参数并没有三个 只有两个 所以最多只能拥有2个参数
2、关于 回传 void | undefined | null
Ts并不像Js 在没有回传的函数中 就是回传void 在Js中如果没有回传则自动会在函数中生成
return undefined
3、箭头函数不支持this 需要声明一个支持this的箭头函数 需要先声明
type Person = {
name:string
age:number
sayHi:sayHi
}
type FnWithThis = (this:Person,name:string) => void
const sayHi: FnWithThis = function(){console.log('hi' + this.name) }
只有function才能有this 用箭头则指向global的this
现在的this则指向Person中的name
sayHi('Jack')
//这样是无法调用的,因为this的返回类型是void 必须包装sayHi到一个object中
const x:Person = {
name:'frank',
age: 18,
sayHi: sayHi
//这里的sayHi 在Person的类型中并没有 所以在Person中也需要添加sayHi:sayHi
}
x.sayHi('Jack')
//这样就可以正常调用sayHi 亦或者 sayHi.call(x, 'Jack')
如果使用sayHi.call(x, 'Jack') 则可以不需要在Person中添加sayHi:sayHi
4、以上的普通对象、数据对象、函数对象以外的对象描述则用class
const d:Date = new Date()
const r: RegExp = /ab+c/
const r2: RegExp = new RegExp('ab+c')
const m: Map<string, number> = new Map()
m.set("xxx",2)
const wm: WeakMap<{name:stirng}, number> = new WeakMap()
const s:Set<number> = new Set()
const ws: WeakSet<object> = new WeakSet()
// WeakMap&& WeakSet 有约束泛型第一个参数固定时object
// 一般Weak开头都是有约束泛型