타입이 명시된 변수에 객체 리터럴을 할당할 때 타입스크립트는 아래의 두 항목을 확인한다. 1. 해당 타입의 속성이 있는지 2. 그 외의 속성은 없는지 -> 잉여속성체크 interface Room { numDoors: number; ceilingHeightFt: number; } const r: Room = { numDoors: 1, ceilingHeightFt: 10, elephant: 'present', //~~~~~~~~~~~~~~~~~~~~ Object literal may only specify known properties, // and 'elephant' does not exist in type 'Room'. }; 구조적 타이핑의 관점으로 보았을 때 위의 코드는 오류가 발생하지 않아야 하지만 ..
자바스크립트는 본질적으로 '덕 타이핑(duck typing)' 기반이다. 덕 타이핑은 객체가 어떤 타입에 부합하는 변수와 메서드를 가지는 경우 객체를 해당 타입에 속하는 것으로 간주하는 것이다. 어떤 함수에 매개변수 값이 요구사항을 만족한다면 타입이 무엇인지 신경쓰지 않는다는 것인데 타입스크립트는 이런 동작을 그대로 모델링한다. 구조적 타이핑을 제대로 이해한다면 오류인 경우와 오류가 아닌 경우의 차이를 알 수 있고, 더욱 견고한 코드를 작성할 수 있다. 어떤 2D 벡터 타입을 다룬다고 가정해보자. interface Vector2D { x: number; y: number; } 벡터의 길이를 계산하는 함수는 다음과 같다. function calculateLength(v: Vector2D) { return ..
1. TypeScript 설정 이해하기 타입스크립트 컴파일러는 언어의 핵심 요소에 영향을 미치는 몇 가지 설정을 포함하고 있다. 다음의 코드가 오류 없이 타입 체커를 통과할 수 있을까? function add(a, b) { return a + b; } add(10, null); 이 질문에는 ts 설정이 어떻게 되어있는지 알아야 정확히 답할 수 있다. 타입스크립트 컴파일러에는 100 가까이 되는(또는 그 이상의) 설정 옵션이 존재하며 이 설정은 커맨드 라인과 tsconfig.json 설정 파일을 통해 사용할 수 있다. $ tsc --noImplicitAny program.ts 커맨드라인에서 사용하기 { "compilerOptions": { "noImplicitAny": true } } tsconfig.js..
키링(Keyring) 키링은 메타마스크의 비밀 저장 및 계정 관리 시스템의 핵심 개념. KeyringController = 키링의 구현 KeyringController README 일부 A module for managing groups of Ethereum accounts called "Keyrings", defined originally for MetaMask's multiple-account-type feature. The KeyringController has three main responsibilities: *Initializing & using (signing with) groups of Ethereum accounts ("keyrings"). *Keeping track of local ni..
A. 암호키를 위한 보호 요구사항(protection requirement) - 디지털 서명 개인키 Security Service: 디지털 서명 알고리즘 → 출처인증, 무결성 보장, 부인방지의 보안 서비스 제공 Security Protection: 개인키의 안전성을 위한 보호조치 → 기밀성, 무결성 Association Protection: 개인키의 안전성을 위해 키와 연관되어 함께 보호되어야 하는 대상 → 키의 사용 혹은 응용과정, 서명 과정에서 필요한 도메인 파라미터, 공개키 Assurances Required: 공개키 유효성의 보장 혹은 개인키 보유에 대한 보장의 필요 여부 → 개인키 사용 시점에 실제 사용자에 의해 사용되었음에 대한 보장 Period Protection: 개인키 보호조치 필요 기간..
1. 원시자료형(premitive data type) 원시자료형은 객체가 아니면서 메서드를 가지지 않는 데이터를 말한다. javascript의 원시자료형에는 string, number, bigint, boolean, symbol, undefined, null 이 있다. 모든 원시값은 불변값이다. 즉 변형할 수 없다. 여기서 원시값 자체와 원시값을 할당한 변수를 혼동하지 않아야 한다. 변수에는 새로운 값을 할당할 수 있지만, 이미 생성한 원시값은 객체, 배열, 함수와 달리 변형할 수 없다. // 문자열 메서드는 문자열을 변형하지 않음 var bar = "baz"; console.log(bar); // baz bar.toUpperCase(); console.log(bar); // baz // 배열 메소드는 ..
useEffect는 페인트 후에 실행된다는 보장이 없다. useLayoutEffect에서 상태를 업데이트하면 동일한 렌더링의 모든 useEffect가 페인트 전에 실행되므로 레이아웃 이펙트로 전환된다. 💡 일반적인 리액트의 업데이트 진행 1. 리액트 작업: 가상 DOM 렌더, 이펙트 스케줄링, 실제 DOM 업데이트 2. `useLayoutEffect` 호출 3. 리액트 제어 해제, 브라우저의 DOM 페인트 4. useEffect 호출 일반적으로 useEffect는 레이아웃과 페인트 이후, 지연된 이벤트 중에 발생한다. useEffect는 새로운 렌더링이 시작되기 전에 실행되도록 보장된다. 때때로 useEffect가 페인트 전에 실행될 수도 있다. a) 새 업데이트(리렌더)가 시작되기 전에 useEffec..
서버에서 ngrok을 실행하고 터미널을 종료하면 세션도 같이 종료되어 호스팅이 끊어진다. 이를 해결하기 위해 linux 및 Mac OS에 기본으로 설치되는 nohup을 이용할 수 있다. 1. yml 생성하기 우선 yml 파일을 하나 생성해야 한다. 어디에 생성해도 상관 없지만 ngrok이 설치된 폴더에 넣어두는게 좋겠지. 나의 경우 /snap/ngrok 에 nohup이라는 디렉토리를 생성하고 config.yml을 생성했다. cd /snap/ngrok sudo mkdir nohup cd nohup sudo vi config.yml 이러면 vi를 통해 새로 만든 config.yml 파일이 열린다. 그 안에 아래와 같이 작성 해준다. authtoken: {당신의 Authtoken 값} version: 2 tu..