如下代码是泛型吗?
export default interface IField<I = object, O = I> {
set(value: I): void;
get(): O;
}
为什么是 I = object
这种写法呢?
如下代码是泛型吗?
export default interface IField<I = object, O = I> {
set(value: I): void;
get(): O;
}
为什么是 I = object
这种写法呢?
interface Card {
name: string
age: number
}
interface IField<I = Card, O = I> {
set(value: I): void;
get(): O;
}
// 泛型变量I可以是一个对象,O可以是一个I对象
const map: IField<string, number> = {
set(value: string) { },
get: () => 1,
}
// 如果你想有强烈的继承关系,请使用extends ,要使用下面的写法
interface List<I extends Card, O extends I> {
set(value: I): void;
get(): O;
}
// 但是写成这样就不行, I 必须是继承Card的
// const myList: List<Date, Date> = { × 错误写法
const myList: List<Card, Card> = {
set(value: Card) { },
get: () => {
return {
name: 'xiaoming',
age: 15
}
},
}
默认类型,如果有定义 I 类型时,那类型为 I,如果无定义时,类型为 object。