当扩展接口类型不正确时不会抱怨

时间:2020-11-06 05:30:56

标签: typescript

我测试了此代码段here

interface OnlyName {
    name: string
}

interface MyTest2 extends OnlyName { 
    age: number
}

let test1: OnlyName;

const setTest1 = (v: OnlyName) => {
    test1 = v
    console.log(test1)
}

let test2: MyTest2 = {
    name: 'test2',
    age: 2,
}

setTest1(test2)

我希望setTest1()会抱怨,因为setTest1()仅允许将OnlyName作为参数,但是MyTest2被传递了,它起作用了。

为什么不抱怨,有没有办法只允许OnlyName

1 个答案:

答案 0 :(得分:1)

就像@Aleksey L所说,这是由于结构类型系统。 如果您将文字对象传递给setTest1,TS将会抱怨:


setTest1({
    name: 'test2',
    age: 2, //Object literal may only specify known properties, and 'age' does not exist...
})

您可以找到有关here多余属性检查的更多信息