我在这里测试了这个片段
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...
})
你可以在这里找到更多关于超额财产检查的