【发布时间】:2019-09-20 04:25:53
【问题描述】:
试图弄清楚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'
}
【问题讨论】:
标签: typescript