interface Ilength {
length: number
}
function getLength<T extends Ilength>(arg: T): T {
return arg
}
let res = getLength<string>('str')
let res1 = getLength<string[]>(['1', '2', '3'])
let res2 = getLength<{
name: string
length: number
}>({
name: 'str',
length: 777
})
function getProperty<T, K extends keyof T>(arg: T, key: K): T[K] {
return arg[key]
}
interface Obj {
name: string,
height: string,
age: number
}
let obj = {
name: '张三',
height: '180cm',
age: 18
}
let getName = getProperty<Obj, 'name'>(obj, 'name')
let getheight = getProperty<Obj, 'height'>(obj, 'height')
let getAge = getProperty<Obj, 'age'>(obj, 'age')