728x90
TypeScript의 타입
프로그램이 유용하려면, 가장 간단한 데이터 단위로 작업 할 수 있어야한다.
TypeScript는 JavaScript에서 기대하는 것과 동일타입을 지원하며 추가적인 열거타입이 제공된다.
JavaScript 타입 |
Boolean |
Number |
String |
Null |
Undefined |
Symbol |
Array |
타입스크립트에서 추가적으로 제공하는 타입
추가타입 |
Any |
Void |
Never |
Unknown |
Tuple: Object형 |
boolean타입
let isOk: Boolean = true;
Number타입
let decimal: number = 6; // 10진수
let hex: number = 0xf00d; // 16진수
let binary: number = 0b1010; // 2진수
let octal: number = 0o744; // 8진수
let notANumber: number = NaN; // Not a Number가능
let underscoreNum: number = 1_000_000; // _로 천단위 표기 가능
String타입
- 자바스크립트처럼 백틱(`)기호를 사용하여 변수를 사용할 수 있다.
let myName: string = 'Mark';
myName = 'Anna';
let fullName: string = 'Mark Lee';
let age: number = 39;
let sentence: string = `Hello, My name is ${fullName}.
I'll be ${age + 1} years old next month.`;
console.log(sentence);
Symbol타입
- new Symbol로 사용할 수 없고 프리미티브 타입을 사용해야만 한다.
- 고유하고 수정불가능한 값으로 만들어 줍니다.
- 주로 접근제어하는데 많이 쓰인다.
console.log(Symbol('foo') === Symbol('foo'));,
const sym = Symbol();
// 변수 sym을 키로 만들 수 있다.
const obj = {
[sym]: "value",
};
// 변수 sym을 통해 접근이 가능하다.
obj[sym];
null과 undefined타입
- tsconfig.ts에서 아래 옵션이 켜져 있으면 null과 undefined를 변수에 넣을 수 없다.
"strict": true, // 옵션
- null은 사용할 준비가 덜 된 상태를 의미한다.
let MyName: string = null; // 컴파일 에러
let union: string | null = null; // 사용가능
union = "Mark";
- undefined는 준비가 아예 안된 상태를 의미한다.
let u: undefined = null; // 넣을 수 없다.
let v: void = undefined; // 가능
Object
non-primitive type을 나타내고 싶을 때 사용한다.
const person3: object = { name:"Mark", age:39 }; // 넣을 수 있다.
const person4: object = 39; // 넣을 수 없다.
Array
- JS에 기존에 존재하던 타입
- 같은 타입의 셋
let list: number[] = [1, 2, 3];
// 사용자제
let list2: Array<number> = [1, 2, 3];
// union 타입
let list3: (number | string)[] = [1, 2, 3, "4"];
Tuple
- 서로 다른 데이터 타입을 넣을 수 있는 타입
let x: [string, number];
x = ["Hello", 39];
// x = [10, 'Mark'];
const person: [string, number] = ['Mark', 39];
const [] = person;
Any
- 어떤 타입이어도 상관없는 타입이다.
- 컴파일 타임에 타입체크가 정상적으로 이뤄지지 않기 때문에 최대한 쓰지 않는게 좋다.
- noImplicitAny: true를 켜놓으면 any를 써야 하는데 쓰지 않으면 오류를 뱉도록 한다.
function returnAny(message: any): any {
console.log(message);
}
const any1 = returnAny('리턴은 아무가나');
any1.toString();
unknown
- 변수가 무엇이든 될 수 있음을 알려주는 타입을 제공한다.
- any보다는 type-safe한 타입이다.
declare const maybe: unknown;
const aNumber: number = maybe; // 할당이 안됨
if (maybe === true) { // boolean으로 타입이 지정됨
const aBoolean: boolean = maybe;
// const aString: string = maybe;
}
if(typeof maybe === 'string') { // string으로 타입이 지정됨
const aString: string = maybe;
// const aBoolean: boolean = maybe;
}
never
- 모든 타입의 subtype이며 모든 타입에 할당 할 수 있다.
- 하지만, never에는 어떤 것도 할당할 수 없다.
- any도 할당 할 수 없다.
- 잘못된 타입을 넣는 것을 방지 할 수 있다.
function error(message: string): never {
throw new Error(message);
}
function fail() {
return error('failed');
}
function infiniteLoop(): never {
while(true) {}
}
let a: string = "hello";
if(typeof a !== 'string') {
a; // never가 됨.
}
type Indexable<T> = T extends string ? T & {[index: string]: any} : never;
type ObjectIndexable = Indexable<{}>;
const b: Indexable<{}> = ''; // never타입이 되서 대입이 안됨
void
- 리턴가지고 아무것도 안하겠다는 의미
function returnVoid(message: string): void {
console.log(message);
return undefined; // undefined만 void에 할당이 가능하다.
}
returnVoid("리턴이 없다.");
728x90
'FrontEnd > TypeScript' 카테고리의 다른 글
Interface (0) | 2022.10.07 |
---|---|
TypeScript 컴파일러 (0) | 2022.09.28 |
TypeScript 타입호환성 (0) | 2022.09.27 |
TypeScript의 옵션 (0) | 2022.09.26 |
TypeScript란? (1) | 2022.09.20 |
댓글