#typescript
#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)
Я ожидал, что setTest1() будет жаловаться, потому setTest1()
что разрешает только OnlyName
как параметр, но MyTest2
передается, он работает.
Почему он не жалуется и есть ли способы разрешить только OnlyName
?
Комментарии:
1. Нет, typescript имеет структурную систему типов
Ответ №1:
Как сказал @Aleksey L, это связано со структурной системой типов. Если вы передадите буквальный объект setTest1
, TS будет жаловаться:
setTest1({
name: 'test2',
age: 2, //Object literal may only specify known properties, and 'age' does not exist...
})
Вы можете найти больше о проверке избыточных свойств здесь