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



我在这里测试了这个片段

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

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


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

你可以在这里找到更多关于超额财产检查的

相关内容

最新更新