我有两个接口:
export interface IProductInCartBody {
count: number;
variantId: string;
}
export interface IProductInCart {
id: string;
variantId: string;
name: string;
price: number;
count: number;
}
字符串
为什么我在这一行没有错误:
第一个月
我想我都试过了)
我有两个接口:
export interface IProductInCartBody {
count: number;
variantId: string;
}
export interface IProductInCart {
id: string;
variantId: string;
name: string;
price: number;
count: number;
}
字符串
为什么我在这一行没有错误:
第一个月
我想我都试过了)
2条答案
按热度按时间bxfogqkk1#
你不会在那一行得到错误,因为TypeScript允许你在某些情况下执行类型Assert,即使类型不完全相同。
在这种特定情况下,类型Assert
productsInTheCart
asIProductInCart[]
告诉TypeScript将productsInTheCart
变量视为IProductInCart
对象的数组,即使其声明的类型是IProductInCartBody[]
。TypeScript允许这种类型Assert,因为
IProductInCartBody
具有IProductInCart
属性的子集,即count和variantId。当您将
IProductInCartBody
数组分配给IProductInCart[]
类型的变量时,TypeScript会推断数组中的每个元素至少具有IProductInCart
所需的属性。其他属性,如
id
,name
和price
,对于TypeScript验证赋值是不必要的。yruzcnhs2#
因为
IProductInCartBody
定义了一个满足接口契约的对象必须有一个number
类型的属性count
和一个string
类型的属性variantId
。由于
IProductInCart
类型的ab对象满足了这两个条件,因此它满足了这个契约(=接口),因此您可以分配值。换句话说,
IProductInCart
比IProductInCartBody
更具体。您也可以按如下方式定义接口,这样更容易理解:字符串
参见TypeScript docs on type compatibility。