我测试了此代码段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
?
答案 0 :(得分:1)
就像@Aleksey L所说,这是由于结构类型系统。
如果您将文字对象传递给setTest1
,TS将会抱怨:
setTest1({
name: 'test2',
age: 2, //Object literal may only specify known properties, and 'age' does not exist...
})
您可以找到有关here多余属性检查的更多信息