TS-泛型

发布时间:2024年01月22日

一见如故

  • 什么地方用到了泛型:函数、类型别名、接口、类
  • 定义泛型:在这些可以使用泛型的地方后面加尖括号,并写入‘形参’;
  • 使用泛型:在使用的函数或者类型后面加尖括号并注入类型(有的时候会被自动类型推断,有时不会)
  • 类型约束使用关键词extends

类型约束

interface WithLength {
	length: number
}
function fn<T extends WithLength>(arg: T): T{
	const len = arg.length
	return arg
}
------------------------------------------
function getProperty<O, K extends keyof O>(obj: O, key: K) {
	return obj[key]
}
let obj = {a: 1,b: 2, c: 3, d: 4}
getProperty(obj, 'a')  //可以
getProperty(obj, 'e') //不可以

泛型函数

function fn<T>(arg: T):T {
	return T
}
let a = fn(3)
let b = fn('中国')

泛型接口

// 函数要使用的参数类型,将来由用户自己定义
function fn<T>(arg: T): T {
	return arg
}
interface Myinterface<T> {
	(arg: T): T
}
const str:Myinterface<string> = fn

类型别名使用泛型(编写通用的辅助类型)

type OrNull<T> = T | null
type OneOrMany<T> = T | T[]
type OneOrManyOrNull<T> = OrNull<OneOrMany<T>>

泛型类

// 类中的某些类型交给用户自己定义
class MyClass<T> {
	value: T
	add: (x: T, y: T) => T
}
let instance = new MyClass<number>()
instance.value = 0
instance.add = function(x, y) {
	return x + y
}
文章来源:https://blog.csdn.net/weixin_43390711/article/details/135736372
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。