Не жалуется, когда неправильный тип при расширенном интерфейсе

#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...
})
  

Вы можете найти больше о проверке избыточных свойств здесь