我有一些类似于以下代码的代码,其中2个接口是从同一基础派生的。函数“ String”采用类型为“ StringAsset”的粗略形式。现在,如果我调用“ String”函数并将其值传递给“ NumberAsset”,我希望Typescript给我键入错误。但事实并非如此。
我的猜测是,即使显式键入“ StringAsset”,该函数也会隐式接受“ BaseAsset”参数。
我如何强制子类型只接受所述子类型而不接受兄弟类型?
interface BaseAssets {
message?: string
}
interface StringAssets extends BaseAssets {
length?: number
maxLength?: number
minLength?: number
}
interface NumberAssets extends BaseAssets {
value?: number
maxValue?: number
minValue?: number
}
function String(assets: StringAssets){
//Some code to run
}
const asset:NumberAssets = {
minValue: 10,
maxValue: 100,
}
String(asset) //Expected typing error
答案 0 :(得分:0)
已解决。
(Easiest) Way to use Python 3.6 and 3.7 on same computer?
Typescript将具有可选属性的接口与具有显式属性的接口区别对待。两个仅具有可选属性的子类型在结构上将与其基本类型相同,因此在类型检查期间将所有3个子类型均等地对待。