typescript 泛型

如下代码是泛型吗?

export default interface IField<I = object, O = I> {
    set(value: I): void;
    get(): O;
}

为什么是 I = object 这种写法呢?

阅读 1.9k
2 个回答

默认类型,如果有定义 I 类型时,那类型为 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
        }
    },
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进