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

Typescript 扩展接口类型不正确时不抱怨,typescript,Typescript,我测试了这个片段 我希望setTest1()会抱怨,因为setTest1()只允许OnlyName作为参数,但是MyTest2被传递,它就工作了 为什么它不抱怨,是否有办法只允许OnlyName?就像@Aleksey L说的,这是因为结构类型系统。 如果将文字对象传递给setTest1,TS将抱怨: setTest1({ 名称:“test2”, age:2,//对象文字只能指定已知属性,并且“age”不存在。。。 }) 您可以找到有关多余属性检查的更多信息否,typescript已 inte

我测试了这个片段

我希望setTest1()会抱怨,因为
setTest1()
只允许
OnlyName
作为参数,但是
MyTest2
被传递,它就工作了


为什么它不抱怨,是否有办法只允许
OnlyName

就像@Aleksey L说的,这是因为结构类型系统。 如果将文字对象传递给
setTest1
,TS将抱怨:


setTest1({
名称:“test2”,
age:2,//对象文字只能指定已知属性,并且“age”不存在。。。
})
您可以找到有关多余属性检查的更多信息

否,typescript已
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)