일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 야놀자 fe 1기
- 국비지원취업
- map
- 리액트오류
- 부트캠프
- 성능개선
- react hook
- 패스트캠퍼스
- promise 비동기처리
- 퍼블리셔 이직후기
- 국비지원
- github
- 부트캠프 취업후기
- sqld 자격증 시험
- Filter
- Where
- js CRUD
- Firebase
- sqld 55회
- 야놀자x패스트캠퍼스
- 2024 sqld
- 프론트엔드개발자
- foreach
- firebase rules
- reduce
- css 꿀팁
- git
- 패스트캠퍼스 부트캠프
- TypeScript
- 프론트엔드부트캠프후기
- Today
- Total
Tech is created to fix problem
[Typescript] 클래스와 접근제어자, 제네릭, tsconfig.json 구성 옵션 본문
클래스와 접근 제어자
class UserA {
// 블록 안에 상단에 타입지정 필요
public first: string
protected last: string
private age: number
constructor(first: string, last: string, age: number){
this.first = first
this.last = last
this.age = age
}
// 매개변수로 블록 안의 내용이 같기 때문에 이렇게 변경 가능
constructor(
public first: string
protected last: string
private age: number
) {}
getAge(){
return `${this.first} ${this.last} is ${this.age}`
}
}
접근 제어자
public - 어디에서나 자유롭게 접근 가능, 클래스 바디에서 생략 가능
protected - 나와 파생된 후손 클래스 내에서 접근 가능
private - 내 클래스에서만 접근 가능
1) public
class UserB extends UserA {
getAge() {
return `${this.first} ${this.last} is ${this.age}` ---> private 오류
}
}
// 상속받아서 사용중
const neo = new UserA('Neo', 'Anderson', 102)
console.log(neo.first)
console.log(neo.last) ---> protected 오류
console.log(neo.age)
public 이기 때문에 어디에서나 접근해서 자유롭게 사용이 가능하다 (생략 가능하지만 명시적으로 작성하는 것도 좋은 방법)
2) protected 는
상속에서는 사용 가능하지만
new 인스턴스 생성은 불가능
3) private은 내 클래스에서만 사용 가능
제네릭 문법
1) 함수
<> 꺽새 안에 본인이 사용하고자 하는 타입을 지정해줌
function toArray<T>(a: T, b: T){
return [a,b]
}
consonle.log(
toArray<string>('Neo', 'Anderson')
//<string> 을 제거해도 타입 추론을 통해서 타입이 string 으로 될 것
)
첫번째 인수를 통해서 타입 추론 가능
2) 클래스
class User<P> {
public payload
constructor(payload: P){
this.payload = payload
}
// constructor(public payload: P) {} 로 간략화 가능
getPayload() {
return this.payload
}
}
interface UserAType {
name: string
age: number
isValid: boolean
}
const heropy = new User<UserAType>({
name?: 'Heropy',
age: 85,
isValid: true
})
3) 인터페이스
interface MyData<T> {
name: string
value: T
}
const dataA: MyData<string> = {
name: 'Data A'
value: 'Hello world'
}
const dataB: MyData<number> = {
name: 'Data B'
value: 10
}
// 제약 조건
interface MyData<T extends string | number> {
name: string
value: T
}
tsconfig.json 구성 옵션
- 컴파일하기 위한 세부 옵션
compilerOptions
- 컴파일될 ES(JS) 버전 명시 - 'ES2015' 권장
target : "ES3"
- 모듈 시스템 지정 - "CommonJS", "AMD", "ESNext"
module: "CommonJS" (node.js 환경, 기본값임 / ESNext 는 제일 최신 버전)
- 모듈 해석 방식 지정 - "Node", "Classic"
moduleResolution: "Node"
- ESM 모듈 방식 호환성 활성화 여부
esModuleInterop: false
- 모든 파일을 모듈로 컴파일, import 혹은 export 키워드 필수
isolatedModules: false
- 모듈 해석에 사용할 기준 경로 지정
baseUrl : ./
- 컴파일러가 참조할 타입 선언(d.ts)의 경로를 지정
typeRoots : ["./node_modules/@types"]
- 컴파일에서 사용할 라이브러리 지정
lib : []
- 더 엄격한 타입 검사 활성화
strict : false
- 컴파일할 파일 경로 목록
include
- 컴파일에서 제외할 파일 경로 목록
exclude
'Typescript' 카테고리의 다른 글
[Typescript] 타입가드, interface, 확장, 타입별칭, 함수 오버로딩 (0) | 2023.09.26 |
---|---|
[Typescript] 추론, 단언, 할당단언 (0) | 2023.09.26 |
[Typescript 기본개념] JS보다 타입이 더 많은 TS (0) | 2023.08.30 |