Универсальный тип «BallInterface» требует 2 аргументов типа(ов)

#typescript

Вопрос:

Я изучаю машинопись, и я получил эту ошибку Generic type 'BallInterface' requires 2 type argument(s) в теннисном мяче. Как я могу вызвать функцию, объект параметра которой имеет более одного универсального типа? Почему он выдает ошибку? Весь код:

 const addId = <T extends object>(obj: T) =>{ 
    const id = 3;
    return {
        ...obj,
        id
    }
}

interface BallInterface<T, V>{
    name: string
    data: T
    meta: V
}

const ball: BallInterface<{meta: string}, string> = {
    name: "Tennis",
    data:{meta: "for playing"},
    meta: "Mario"
}

const tennisBall = addId<BallInterface>(ball);
 

Ответ №1:

Это вызывает ошибку, потому что вы определили BallInterface интерфейс как интерфейс, который имеет два универсальных интерфейса.

В последней строке вы называете addId , что вы передаете BallInterface как универсальный, не указывая, каким будет T и V какой будет BallInterface.

Не совсем ясно, какова ваша цель здесь. Если все, чего вы хотите добиться, — это добавить Id поле, вам вообще не нужно передавать общее addId значение. Вы делаете это сложнее, чем есть на самом деле 🙂

 const addId = (obj: object) =>{ 
    const id = 3;
    return {
        ...obj,
        id
    }
}

interface BallInterface<T, V>{
    name: string
    data: T
    meta: V
}

const ball: BallInterface<{meta: string}, string> = {
    name: "Tennis",
    data:{meta: "for playing"},
    meta: "Mario"
}

const tennisBall = addId(ball);
 

Комментарии:

1. Спасибо за ваш ответ, теперь он не выдает ошибку. Но все равно я не мог хорошо понять, я сделал другой интерфейс, в котором я поместил только один универсальный, и там, когда я вызвал addId, как этот addId<BallInterface>(мяч); он не выдает ошибку.