Size: a a a

Angular - русскоговорящее сообщество

2019 October 20

НИ

Николай Ильминский in Angular - русскоговорящее сообщество
Народ, кто с typescript на "ты", объясните плз след. феномен:

const obj = { name: 'ivan', age: 22 }

const a: {name: string} = obj  // good
const b: {name: string} = { name: 'ivan', age: 22 } // Error: Type '{ name: string; age: number; }' is not assignable to type '{ name: string; }'.
 Object literal may only specify known properties, and 'age' does not exist in type '{ name: string; }'.

WAT? Какого черта? Это же выглядит как баг компилятора

http://www.typescriptlang.org/play/?ssl=2&ssc=22&pln=1&pc=1#code/MYewdgzgLgBCBGArGBeGBvGYCGBbApgFwwDkAlgG7ZgkA0M2A5kTAEyswC+AUN6JLGzF0OAsWgAnMmEadUcJH3DQY8YaJaTps+Zg3FyVGvSYt2XIA
источник

EK

Eugene Kalashnikov in Angular - русскоговорящее сообщество
Возможно, потому что для obj тип не задан. Если для obj указать тип явно, то компилятор должен ругнуться.
источник

И

Илья | 😶 in Angular - русскоговорящее сообщество
const b: {name: string}
и смотри что ты к этой переменной хочешь запихать  { name: 'ivan', age: 22 }
источник

RM

Ryabets Mychailo in Angular - русскоговорящее сообщество
Илья | 😶
const b: {name: string}
и смотри что ты к этой переменной хочешь запихать  { name: 'ivan', age: 22 }
Но переменной «а» он присваивает тот же тип и по сути тот же объект из переменной obj
источник

RM

Ryabets Mychailo in Angular - русскоговорящее сообщество
Гммммм это интересно 🤔
источник

VH

Vladyslav Hrehul in Angular - русскоговорящее сообщество
Николай Ильминский
Народ, кто с typescript на "ты", объясните плз след. феномен:

const obj = { name: 'ivan', age: 22 }

const a: {name: string} = obj  // good
const b: {name: string} = { name: 'ivan', age: 22 } // Error: Type '{ name: string; age: number; }' is not assignable to type '{ name: string; }'.
 Object literal may only specify known properties, and 'age' does not exist in type '{ name: string; }'.

WAT? Какого черта? Это же выглядит как баг компилятора

http://www.typescriptlang.org/play/?ssl=2&ssc=22&pln=1&pc=1#code/MYewdgzgLgBCBGArGBeGBvGYCGBbApgFwwDkAlgG7ZgkA0M2A5kTAEyswC+AUN6JLGzF0OAsWgAnMmEadUcJH3DQY8YaJaTps+Zg3FyVGvSYt2XIA
разница в том, что тут
const a: {name: string} = obj  // good
ты перезаписываешь обьект,
а в const b: {name: string} = { name: 'ivan', age: 22 }  - ты инициализируешь его.
источник

VH

Vladyslav Hrehul in Angular - русскоговорящее сообщество
1 вариант = тоже самое что создать перменную стринг и создать массив, и в переменную стринга ты сможешь записать массив.
источник

RM

Ryabets Mychailo in Angular - русскоговорящее сообщество
Vladyslav Hrehul
разница в том, что тут
const a: {name: string} = obj  // good
ты перезаписываешь обьект,
а в const b: {name: string} = { name: 'ivan', age: 22 }  - ты инициализируешь его.
перезапиывает??
ты уверен??
источник

VH

Vladyslav Hrehul in Angular - русскоговорящее сообщество
Ryabets Mychailo
перезапиывает??
ты уверен??
ну так проверь, написал же даже как
источник

RM

Ryabets Mychailo in Angular - русскоговорящее сообщество
а обекты не по ссылке идут??
источник

VH

Vladyslav Hrehul in Angular - русскоговорящее сообщество
что будет в данном случае содержать переменная, которая до этого имела стринг в себе?
источник

VH

Vladyslav Hrehul in Angular - русскоговорящее сообщество
1 вариант = тоже самое что создать перменную стринг и создать массив, и в переменную стринга ты сможешь записать массив.
источник

RM

Ryabets Mychailo in Angular - русскоговорящее сообщество
но если это тайпскрипт то он не даст тебе это сделать
источник

VH

Vladyslav Hrehul in Angular - русскоговорящее сообщество
Ryabets Mychailo
но если это тайпскрипт то он не даст тебе это сделать
попробуй
источник

VH

Vladyslav Hrehul in Angular - русскоговорящее сообщество
тебе челик даже кинул что ошибка во 2 строке, а не в 1
источник

RM

Ryabets Mychailo in Angular - русскоговорящее сообщество
ок, попробую позже, сейчас не могу, возможно я ошибаюсь
источник

VH

Vladyslav Hrehul in Angular - русскоговорящее сообщество
источник

VH

Vladyslav Hrehul in Angular - русскоговорящее сообщество
походу в этом дело
источник

VH

Vladyslav Hrehul in Angular - русскоговорящее сообщество
когда ты приписываешь const a: {name: string} = obj - идет "приписывание", а когда 2 случай
источник

VH

Vladyslav Hrehul in Angular - русскоговорящее сообщество
то идет каст на тот тип
источник