0

Мой исходный код - Objective-C, где вы можете указать типы, в которых есть как классы, так и интерфейсы. Кажется, я не могу найти документацию, которая показывает это в TypeScript, но она должна существовать, правильно?Указание типа с классом и интерфейсом в TypeScript

Вот пример:

class Vehicle {} 
class Car extends Vehicle {} 
class Truck extends Vehicle {} 

interface Electric{} 

// These next lines are WRONG! 
ChargeMyCar(car: Car<Electric>) { ... } 
ChargeMyTruck(truck: Truck<Electric>) { ... } 

Возможно ли это? Что такое синтаксис?

Как насчет типа, который имеет несколько интерфейсов?

+1

Brent - после прочтения ваш вопрос несколько раз, я не уверен, что вы ищете для. Возможно, вы могли бы показать, какой код вы используете в Objective-C, и тогда может быть яснее, что такое аналогичный TypeScript. – NYCdotNet

ответ

2

Это действительно зависит от того, что вы пытаетесь сделать с электрическим интерфейсом. Вы можете использовать следующий синтаксис:

class Vehicle { 
    fuel: any; 
} 
class Car<T> extends Vehicle { 
    fuel: T; 
} 
class Truck<T> extends Vehicle { 
    fuel: T; 
} 

interface Electric {} 

ChargeMyCar<T extends Electric>(car: Car<T>) { ... } 
ChargeMyTruck<T extends Electric>(truck: Truck<T>) { ... } 

Приведенный выше пример показывает, что автомобиль/грузовик имеет абстрактный тип топлива, а также для того, чтобы «зарядить» автомобиль/грузовик, вы должны иметь автомобиль/грузовик с Топливо электрического типа. Какой-то глупый пример, но вы понимаете синтаксис?

Несколько интерфейсов легко, если вы хотите использовать несколько интерфейсов, вместо этого вы можете просто сделать следующее:

class Vehicle { 
    fuel: any; 
} 
class Car extends Vehicle { } 
class Truck extends Vehicle { } 

interface Electric { } 

class ElectricCar implements Vehicle, Electric { } 
class ElectricTruck implements Vehicle, Electric { } 

ChargeMyCar(car: ElectricCar) { ... } 
ChargeMyTruck(truck: ElectricTruck) { ... } 
+0

Оглядываясь на кучу больше, я думаю, что это правильный ответ. Я не ожидал, что нужно будет использовать тип ElectricCar и ElectricTruck, но, похоже, это самый простой ответ. –

+0

Другая реализация может быть «class ElectricCar extends Car implements Electric {}', это может быть то, что вы ищете. – wjohnsto