来自相同碱基的亚型之间的区别

问题描述 投票:0回答:1

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

typescript
1个回答
0
投票

解决了。

https://www.typescriptlang.org/docs/handbook/type-compatibility.html

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

© www.soinside.com 2019 - 2024. All rights reserved.