源自同一碱基的亚型之间的区分

时间:2019-03-28 15:49:51

标签: typescript

我有一些类似于以下代码的代码,其中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

1 个答案:

答案 0 :(得分:0)

已解决。

(Easiest) Way to use Python 3.6 and 3.7 on same computer?

Typescript将具有可选属性的接口与具有显式属性的接口区别对待。两个仅具有可选属性的子类型在结构上将与其基本类型相同,因此在类型检查期间将所有3个子类型均等地对待。