ES6에서 number, boolean, string, undefined, null, object 이외에 7번째 새로운 자료 구조인 Symbol이 등장했다. Symbol 심볼은 unique id를 생성해주는 factory 함수라고 생각하면 편하다. let symbol2 = Symbol('simsimjae'); 이런식으로 simsimjae라고 하는 이름을 가진 심볼을 생성할 수 있다. 여기서 'simsimjae'의 역할은 심볼에 이름을 붙인거(description)라고 생각하면 된다. 따라서 같은 이름을 가진 심볼을 2개를 만들었다고 해서 그 두개의 심볼이 같은것은 아니다. Symbol('simsimjae') !== Symbol('simsimjae') 왜냐면 심볼은 생성할때마다 유니크한 값이 되기 때문이다..
Unknown과 any 두 타입 모두 타입을 지정하기 애매할때 사용한다. 두 타입의 차이점은 뭔지 궁금해서 찾아보았다. 아래 예시를 보자. function prettyPrint(x: unknown): string { if (Array.isArray(x)) { return "[" + x.map(prettyPrint).join(", ") + "]" } if (typeof x === "string") { return `"${x}"` } if (typeof x === "number") { return String(x) } return "etc." } x라는 parameter는 unknown타입이다. 따라서 x에는 모든 타입이 올 수 있다. 그리고 나서 함수 내부에서 x의 타입을 좁혀서 사용하면 된다. 물론 x가..
위 그림에서 never는 아주 작은 점, unknown은 전체를 포함하고 있다는것을 잘 기억하자. unknown 다른 모든 타입들의 슈퍼셋이다. 모든 타입들은 unknown타입이다. never 다른 모든 타입들의 서브셋이다. 가장 최하위 개념의 타입이다. 따라서, 그 어떤 다른 타입들도 never타입일 수 없다. never는 never그 자체다. T | never ⇒ T never는 그 어떤 타입도 아니기 때문에 union을 하더라도 그대로다. T & unknown ⇒ T unknown은 모든 타입들의 superset이기 때문에 unknown과 어떤 타입 T를 교집합하면 그대로 T가 나온다. never로 타입 추론 예외를 제거하자. type Arguments = T extends (...args: inf..
// 에러를 던지기 때문에 함수가 절대 어떤값도 리턴하지 않는다. function error(message: string): never { throw new Error(message); } // 위 error함수의 리턴값으로 추론된 타입은 never이다. function fail() { return error("Something failed"); } // never는 함수에서 그 어떤값도 리턴되지 않을것임을 명시한다. function infiniteLoop(): never { while (true) { } } never 타입 변수에는 그 어떤값도 할당이 불가능하다. // never형 변수 neverVar에는 null도 할당할 수 없다. let neverVar: never = null;
Mobx에서 observable state를 변경하려면 항상 액션을 통해서 변경하는것을 추천한다. 그래야 Mobx가 state변경 사항을 모아서 한번에 처리해줄 수 있기 때문이다. @action 데코레이터나 action() 함수는 현재 실행중인 함수에만 적용된다. 현재 함수에 의해서 스케쥴된 함수에는 액션이 적용되지 않는다. 이게 무슨말인지 자세히 살펴보자. // state가 항상 action으로만 변경되게끔 설정하는 옵션이다. mobx.configure({ enforceActions: "observed" }) class Store { @observable githubProjects = [] @observable state = "pending" // "pending" / "done" / "error" @..
이 글은 공식문서를 보고 요약, 의역 정리한것입니다. observable은 mobx패키지에서 // wrong import { observable } from "mobx/lib/mobx" // correct import { observable } from "mobx" Use @observer on all components that render @observables. observable을 사용하는 모든 컴포넌트에 observer를 달아라. 그래야 mobx가 최대한 최적화를 해줄 수 있다. observer는 inject보다 먼저 // wrong @observer @inject('store') // correct @inject('store') @observer observable을 받아서 컴포넌트 내부에 한..
Given an array of strings products and a string searchWord. We want to design a system that suggests at most three product names from products after each character of searchWord is typed. Suggested products should have common prefix with the searchWord. If there are more than three products with a common prefix return the three lexicographically minimums products. Return list of lists of the sug..
Given two equal-size strings s and t. In one step you can choose any character of t and replace it with another character. Return the minimum number of steps to make t an anagram of s. An Anagram of a string is a string that contains the same characters with a different (or the same) ordering. Example 1: Input: s = "bab", t = "aba" Output: 1 Explanation: Replace the first 'a' in t with b, t = "b..
- Total
- Today
- Yesterday
- Polyfill
- react
- props
- react hooks
- server side rendering
- promise
- Action
- Babel
- typescript
- storybook
- javascript
- reducer
- reactdom
- useRef
- type alias
- webpack
- rendering scope
- es6
- mobx
- Next.js
- reflow
- hydrate
- await
- async
- design system
- computed
- atomic design
- return type
- useEffect
- state
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |