2017-02-21 4 views
1

Я, наверное, подумал об этом. В принципе, я хотел бы иметь не-общий интерфейс, который реализует несколько свойств, а затем создает второй тип, который реализует этот интерфейс с его собственным общим свойством.Расширение не общего интерфейса с общим интерфейсом

interface Car { 
    model: string; 
} 

interface Car<T> extends Car { 
    transmission: T; 
} 

ошибки Машинопись:

"Все декларации о 'Автомобиль' должны иметь одинаковые параметры типа."

Единственный способ, который я могу найти, - назвать не общий интерфейс чем-то другим, например CarBase. Предложения?

+0

Что вы пытаетесь сделать? Почему вы разделили бы его на два разных интерфейса с тем же именем? Это эквивалентно 'интерфейсу Car {model: string; передача: T} ' –

+0

Я хочу, чтобы другой код использовал неосновную ссылку. Currenly Im делает автомобиль , чтобы обойти проверку типа, когда я просто хочу использовать автомобиль. – cgatian

+0

Почему у них должно быть одноименное имя? –

ответ

1

Вы можете использовать type alias, чтобы спасти вас от написания Car<any>:

interface Car<T> { 
    model: string; 
    transmission: T; 
} 

type AnyCar = Car<any>; 
+0

Это то же самое, что и написание: 'интерфейс CarBase реализует автомобиль '? – cgatian

+1

Это почти то же самое, но существуют различия между интерфейсами и псевдонимами типа. Это объясняется в [Интерфейсы против псевдонимов типов] (https://www.typescriptlang.org/docs/handbook/advanced-types.html#interfaces-vs-type-aliases) –

Смежные вопросы