TS 练习题38道的第一题
- 定义一个User类型
type User = {
id: name,
king: string,
}
function makeCustomer<T extends User>(u: T): T {
return {
id: u.id,
king: "customer",
}
}
- 以上代码报错的原因是?
makeCustomer中的T继承于User类型,但是T还可以是其它类型,函数makeCustomer的返回值是T, 函数返回的是User类型,与T类型要求不符。
// 第一种方法:修改函数返回类型为User。
function makeCustomer<T extend User>(u: T): User {
return {
id: u.id,
king: "customer",
}
}
// 第二种方法:修改函数返回表达式,使其符合函数返回类型T
function makeCustomer<T extends User>(u: T): T {
return {
...u,
id: u.id,
king: "customer",
}
}
// 看了github上其它回答,有一个就是不写函数返回类型T,让函数自己推断返回类型。