想弄清楚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,因此下面的行为和我预期的一样,因为Car和Bike有冲突的属性。
'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'
}发布于 2019-09-20 04:15:55
https://stackoverflow.com/questions/58018283
复制相似问题