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
}