Open Choozii opened 1 year ago
const originObj = { list: [1, 2, 3] };
const aliasForList = originObj.list;
aliasForList[0] = 42;
console.log(originObj.list);
2. 구조분해할당 이후에 원본을 변경하면 변경사항이 구조분해할당 된 변수에는 적용되지 않으므로 원본과 차이가 생김
```ts
// list: [42, 2, 3]
const { list } = originObj;
originObj.list = [100, 200, 300];
console.log(originObj.list); // [42, 2, 3]
console.log(list); // [100, 200, 300]
질문: 135p 맨위 세줄 이해가 안가요.
타입스크립트의 정제 책에서 정제라는 표현을 쓰고 있는데 값이 한번 정제가 된 경우, 함수를 거칠때 마다 타입을 정제해야 한다면 비용이 많이 들기 때문에 정제를 무효화하지 않고 유지한다. 그런데 객체의 속성을 그대로 사용하면 함수를 거친이후 해당 속성이 삭제될 가능성이 있다. 그러므로 구조분해할당 등 지역변수를 사용하는 것이 타입의 유지 측면에서는 일관될 수 있다.(그러나 해당 변수의 값이 원본과 달라질 수 있는 가능성이 있음)
const { name } = props
지역변수 | 속성을 그대로 사용 |
---|---|
name |
props.name |
version | new |
---|---|
ES2015 | 프로미스 |
ES2017 | async await |
런타임에 어떻게 되든 상관없이 async, await으로 작성하면 컴파일 해준다.
콜백 스타일 보다는 async, await 사용 권장(타입 구문이 적게 필요)
프로미스를 직접 생성해서 사용하기 보다는 async, await 사용 권장(덜 복잡하고 async는 무조건 Promise를 반환하므로 타입 추론이 쉽다.)
함수는 어떨 때는 동기로, 어떨 때는 비동기로 사용되어서는 곤란하다.
반(harf)동기: 반환 값을 예측할 수 없다 => 함수의 리턴값은 일종의 약속(계약)인데 그것이 위반됨
let으로 선언하는 것과 const로 선언하는 것의 차이
const lang = 'JS' // 타입은 'JS'
let lang = 'JS' // 타입은 string
const 타입 넓히기 복습!
const, as const의 차이
왜 ?
- 순수 JS만 사용하여 코드를 짜면 절차형으로 짜거나, 함수형으로 짜도 알아보기 어렵다.
- Lodash에서 제공하는 함수를 사용하면 코드 수가 줄어들고 알아보기 편하다.
- 서드파티 라이브러리를 도입하는데 비용이 많이 들면 신중히 생각해야하는데, ts랑 함께 쓴다면 도입하는 것이 낫다.
- 타입 정보를 참고하면서 작업할 수 있고, 타입 구문을 작성할 필요가 줄어듬 => 오히려 시간이 적게 든다 => 유리함
19. 추론 가능한 타입을 사용해 장황한 코드를 방지
20. 다른 타입에는 다른 변수 사용하기
21. 타입 넓히기
22. 타입 좁히기
23. 객체 생성하기