想弄清楚
generics
.
我的理解是
const friday:Transport<Car>
集合
T
到
Car
.
鉴于
vehicle3
属于类型
Bike
,为什么typescript不抛出错误?
'use strict';
interface Vehicle {
brand: string;
}
interface Bike extends Vehicle {}
interface Car extends Vehicle {}
interface Transport<T> {
fleet: T;
manager: string;
}
const vehicle1: Car = {
brand: 'Honda',
}
const vehicle2: Car = {
brand: 'Toyota'
}
const vehicle3: Bike = {
brand: 'Specialized'
}
const today:Transport<Car> = {
fleet: vehicle1,
manager: 'Cindy'
};
const tomorrow:Transport<Car[]> = {
fleet: [vehicle1, vehicle2],
manager: 'John'
}
const friday:Transport<Car> = {
fleet: vehicle3,
manager: 'Steve'
}
编辑
正如Alexey所指出的(谢谢!),typescript接口是
structural
,因此下面的行为与我预期的一样,因为
小型车
和
自行车
具有冲突的属性。
'use strict';
interface Vehicle {
brand: string;
}
interface Bike extends Vehicle {
rider: string
}
interface Car extends Vehicle {
driver: string
}
interface Transport<T> {
fleet: T;
manager: string;
}
const vehicle1: Car = {
brand: 'Honda',
driver: 'Alex'
}
const vehicle2: Car = {
brand: 'Toyota',
driver: 'Bob'
}
const vehicle3: Bike = {
brand: 'Specialized',
rider: 'George'
}
const today:Transport<Car> = {
fleet: vehicle1,
manager: 'Cindy'
};
const tomorrow:Transport<Car[]> = {
fleet: [vehicle1, vehicle2],
manager: 'John'
}
const friday:Transport<Car> = {
fleet: vehicle3,
manager: 'Steve'
}