일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 클론코딩
- 타입스크립트
- TS
- ES5
- 서버리스 #
- es6
- literal
- font-size
- 당근마켓
- &연산
- 문서번호
- 데이터베이스 #try #이중
- readonly
- github
- Props
- angular
- 0.25px border
- TypeScript
- 컴포넌튼
- 전역변수
- 10px
- 1px border
- ZOOM
- Strict
- 0.75px border
- npm
- Websocket
- entity
- 0.5px border
- jwt
- Today
- Total
복잡한뇌구조마냥
타입스크립트(TS, TypeScript) 공부 4 본문
15. 요소 narrowing
type Fish = {swim:string};
type Bird = {fly:string};
function 함수9(animal : Fish | Bird){
if("swim" in animal){
// 요소 in 오브젝트
return animal.swim
}else{
return animal.fly
}
}
- 다음과 같이 요소를 생성하여, 해당 속성을 가지고 있는지 여부를 체크하여 narrowing
16. instanceof를 이용한 narrowing
let 날짜 = new Date();
if (날짜 instanceof Date){
console.log('참이에요')
}
- instanceof 는 부모클래스가 누군지 검사하는 기능
- Date() 같은 날짜를 통해서도 date object를 식별하여 narrowing 할 수 있음
17. literal type을 이용한 narrowing
type Car = {
wheel : "4개",
color : string
}
type Bike = {
wheel : "2개",
color : string
}
function 함수(x:Car2|Bike){
if(x.wheel === "4개"){
}else{
}
}
- 다음과 같이 공통 속성의 값을 비교하여 narrowing하는 방법
18. never type
function 함수(param:string){
if(typeof param == "string"){
console.log(param);
}else{
console.log(param);
//타입이 never임
}
}
- 실제로 사용할 일은 거의 없지만 never (결코 나올 수 없는 자료형의 경우 나옴)
- retrun을 하지 않으며, 함수 실행이 끝나지 않는 (endpoint가 없는) 경우에 붙을 수 있는 타입
- 코드를 이상하게 짜다보면 자동으로 등장 할 수 있기 때문에 인지 필요
- strict 옵션을 킨상태로 any타입을 지정해주지 않는 경우에도 발생 가능
#예제1
function 함수() :never{
while ( true ) {
console.log()
}
}
- 다음과 같이 반복문을 무한 순회하는 함수
#예제2
function 함수() :never{
throw new Error('에러메세지')
}
- throw new Error()문법은 강제로 에럴ㄹ 내는 문법
- error가 발생하면 강제로 코드 실행이 중단되므로 never 조건에 부합
19. public, private, protected, static
- public : 외부 접근 허용
- private : 외부 접근 불가
- protected : 외부 접근 불가, 상속 받은 대상에서 접근 가능
- static : 부모에서만 쓰고 싶을 때 사용 ( public, private, protected 와 같이 사용 가능 )
class User {
private static x = 10; // 외부에서 접근하지못하고 수정도 불가, User자체에서만 사용가능
public static y = 20; // 외부에서 접근 가능하며, User자체에서만 사용
protected z = 30; //외부에서 접근이 제한되나 확장된 개념이라 상속된 클래스에서도 사용가능
}
- 1. 필드값은 원래 모든 User의 자식들에게 물려주는 속성이지만 x, y는 static 키워드가 붙었기 때문에 User.x 이런 식 접근
- 2. private static x는 class 내부에서만 수정이 가능
- 3. public static y는 class 내 외부 상관 없이 수정 가능 public 지워도 동일
- 4. protectd z 는 private 키워드와 유사하게 calss 내부와 확장되어 extends로 복사된 class에서 사용할 수 있음
20. 타입스크립트 class 를 이용한 랜덤위치 사각형 찍기
class Square{
public w1:number;
public h1:number;
public c1:string;
constructor(width:number, height:number, color:string){
this.w1 = width;
this.h1 = height;
this.c1 = color;
}
public draw():void{
let id = document.getElementById("drawPlace");
console.log(id);
if(id instanceof HTMLDivElement){
id.innerHTML+=`<div style="width:${this.w1}px; height:${this.h1}px; background:${this.c1};top:${Math.random()*10000%400}px; left:${Math.random()*10000%400}px;position:absolute;"></div>`
}
}
}
let 네모 = new Square(30, 30, 'red');
네모.draw()
네모.draw()
네모.draw()
네모.draw()
네모.draw()
네모.draw()
네모.draw()
네모.draw()
- constructor를 이용한 위치 및 색상 지정
- 그리기 함수를 이용하여 해당 id에 도형 생성
- HTML요소는 다음과 같이 narrowing
- innerHTML 요소를 통해 랜덤위치에 사격형 생성
21. namespace 문법
- 자바스크립트 import, export 문법이 적을 때, 파일 첨부 방식 사용시 중복 네이밍을 피하기 위해 사용
(a.ts)
namespace MyNamespace {
export interface PersonInterface { age : number };
export type NameType = number | string;
}
(b.ts)
/// <reference path="./a.ts" />
let 이름 :MyNamespace.NameType = '민수';
let 나이 :MyNamespace.PersonInterface = { age : 10 };
type NameType = boolean; //사용 가능
interface PersonInterface {} //사용 가능
- 동일한 이름의 변수명을 사용할 때 namespace로 작성하여 별도의 변수로 인식
22. import, export
(a.ts)
export var 이름 = 'kim';
export var 나이 = 30;
(b.ts)
import {이름, 나이} from './a'
console.log(이름)
- 외부 ts파일에서 값을 받아서 해당 값을 사용
(a.ts)
export type Name = string | boolean;
export type Age = (a :number) => number;
(b.ts)
import {Name, Age} from './a'
let 이름 :Name = 'kim';
let 함수 :Age = (a) => { return a + 10 }
- 타입선언도 동일하게 사용 가능
'웹 개발 공부' 카테고리의 다른 글
타입스크립트(TS, TypeScript) 공부 6 (0) | 2022.12.26 |
---|---|
타입스크립트(TS, TypeScript) 공부 5 (0) | 2022.12.08 |
타입스크립트(TS, TypeScript) 공부 3 (0) | 2022.12.04 |
타입스크립트(TS, TypeScript) 공부 2 (0) | 2022.11.28 |
타입스크립트(TS, TypeScript) 공부 1 (0) | 2022.11.27 |