Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.06.2016, 18:02
Pit Pit вне форума
Интересующийся
Отправить личное сообщение для Pit Посмотреть профиль Найти все сообщения от Pit
 
Регистрация: 21.05.2015
Сообщений: 14

TypeScript: непонятна реализация interface
Приветствую, камрады!
Имеем TS 1.8

Пишу так:

var v: Object;
v = {name1: 'val1'}


Все хорошо компилируется. Вроде как Object совместим с любым объектом.
Пишу вот так:

interface MyInterface {
    name2: string;
}

var v: MyInterface;
v = {name1: 'val1'}  // <--- РУГАЕТСЯ


И он ругается: Error:(138, 55) TS2322: Type '{ name1: "val1"}' is not assignable to type 'MyInterface '.
Object literal may only specify known properties, and 'name1' does not exist in type 'MyInterface '.

НО! Если только "known properties", то почему не ругаетс на первый вариант с Object? Ведь в lib.d.ts Object также определен как Interface:

> interface Object {...

И, естественно, никакого name1 там также не описано...
Ничего не понимаю!

Последний раз редактировалось Pit, 18.06.2016 в 18:05.
Ответить с цитированием
  #2 (permalink)  
Старый 18.06.2016, 21:34
Кандидат Javascript-наук
Отправить личное сообщение для aklis Посмотреть профиль Найти все сообщения от aklis
 
Регистрация: 27.04.2015
Сообщений: 99

Это же форум экмаскрипт, а не тайпскрипт. Врядли тут много знатоков
Ответить с цитированием
  #3 (permalink)  
Старый 18.06.2016, 22:31
Pit Pit вне форума
Интересующийся
Отправить личное сообщение для Pit Посмотреть профиль Найти все сообщения от Pit
 
Регистрация: 21.05.2015
Сообщений: 14

Сообщение от aklis Посмотреть сообщение
Это же форум экмаскрипт, а не тайпскрипт. Врядли тут много знатоков
ну а шо делать шо делать
Ответить с цитированием
  #4 (permalink)  
Старый 19.06.2016, 00:19
Кандидат Javascript-наук
Отправить личное сообщение для yazonnile Посмотреть профиль Найти все сообщения от yazonnile
 
Регистрация: 25.05.2012
Сообщений: 133

Все верно ругается.
http://stackoverflow.com/questions/3...own-properties
Ответить с цитированием
  #5 (permalink)  
Старый 19.06.2016, 12:57
Pit Pit вне форума
Интересующийся
Отправить личное сообщение для Pit Посмотреть профиль Найти все сообщения от Pit
 
Регистрация: 21.05.2015
Сообщений: 14

Сообщение от yazonnile Посмотреть сообщение
Все верно ругается.
http://stackoverflow.com/questions/3...own-properties
спасибо большое! Но там объяснено как это победить - надо в интерфейс добавить:
[others: string]: any;

Тогда начнет "принимать" и другие свойства.

Но непонятно - почему не ругается на Object? Он же объявлен как интерфейс и там подобной строки нету. А принимает что угодно...
Ответить с цитированием
  #6 (permalink)  
Старый 19.06.2016, 13:06
Pit Pit вне форума
Интересующийся
Отправить личное сообщение для Pit Посмотреть профиль Найти все сообщения от Pit
 
Регистрация: 21.05.2015
Сообщений: 14

Разобрался: https://github.com/Microsoft/TypeScr...ess-properties

Цитата:
A property P is said to be expected in a type T if one of the following is true:

T is not an object, union, or intersection type.
T is an object type and
T has a property with the same name as P,
T has a string or numeric index signature,
T has no properties, or
T is the global type 'Object'.
T is a union or intersection type and P is expected in at least one of the constituent types of T.
Тип Object является исключением выделенным.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TypeScript for Large App Angularjs kodermax Angular.js 1 25.03.2015 22:58
Зарезервированное слово interface jsjob Общие вопросы Javascript 2 06.03.2013 11:49