bind(thisArg, arg1, arg2, …):返回一个新函数,其 this 永久绑定到指定对象,不会立即执行。
1 2 3 4 5 6 7 8 9 10 11
function introduce(age, city) { console.log(`I'm ${this.name}, ${age} years old, from ${city}.`); }
const user = { name: 'Bob' };
introduce.call(user, 25, 'New York'); // I'm Bob, 25 years old, from New York. introduce.apply(user, [30, 'London']); // I'm Bob, 30 years old, from London.
const boundIntroduce = introduce.bind(user, 28); boundIntroduce('Paris'); // I'm Bob, 28 years old, from Paris.
// 不使用泛型 function getName01(name: string | number): string | number { return name } console.log(getName01('翠花')) // 翠花 console.log(getName01(123)) // 123
// 使用泛型 function getName02<T>(name: T): T { return name } console.log(getName02<string>('翠花')) // 翠花 console.log(getName02<number>(123)) // 123
结论:使用泛型更灵活。
泛型函数
1 2 3 4
function getName03<T>(name: T): T { return name } console.log(getName03<string>('隔壁老王')) // 隔壁老王
注意:<T> 中的 T 可以是其他合法的字母,建议使用大写字母。
泛型接口
1 2 3 4 5 6 7 8
interface GetName04 { <T>(name: T): T } function getName05<T>(name: T): T { return name } let my_name: GetName04 = getName05 console.log(my_name('小红')) // 小红
const fn = () => {} // const fn: () => void let aa: never = fn() // 不能将类型“void”分配给类型“never”
never 类型的特点
never 类型会从联合类型中移除
1 2 3 4 5 6
type a = unknown | never // unknown type b = any | never // any type c = number | never // number type d = string | never // string type e = object | never // object type f = boolean | never // boolean
never 类型与任意类型的交叉类型都是 never
1 2 3 4 5 6
type g = unknown & never // never type h = any & never // never type i = number & never // never type j = string & never // never type k = object & never // never type l = boolean & never // never
never 可以赋值给任意类型
1 2 3 4 5 6 7
let m: never let n: unknown = m let o: any = m let p: number = m let q: string = m let r: object = m let s: boolean = m
其他类型不能赋值给 never
1 2 3 4
let t: never = 'a' // 不能将类型“string”分配给类型“never” let u: never = 123 // 不能将类型“number”分配给类型“never” let v: never = { a: 1 } // 不能将类型“{ a: number; }”分配给类型“never” let w: never = true // 不能将类型“boolean”分配给类型“never”