[Typescript] Type #2
Replies: 4 comments 4 replies
-
공유하고싶은 자료 & 개인적으로 정리한 블로그 등이 있다면 여기👇👇👇에 댓글로 공유해주세요 😆 |
Beta Was this translation helpful? Give feedback.
-
unknown, any, void, never type
📚unknown
let vAny: any = 10; // We can assign anything to any
let vUnknown: unknown = 10; // We can assign anything to unknown just like any
let s1: string = vAny; // Any is assignable to anything
let s2: string = vUnknown; // Invalid; we can't assign vUnknown to any other type (without an explicit assertion)
vAny.method(); // Ok; anything goes with any
vUnknown.method(); // Not ok; we don't know anything about this variable 📚any
📚void
📚never
// Function returning never must not have a reachable end point
function error(message: string): never {
throw new Error(message);
}
// Inferred return type is never
function fail() {
return error("Something failed");
}
// Function returning never must not have a reachable end point
function infiniteLoop(): never {
while (true) {}
} Interface vs Type allias
Type 확장(Interface,Type allias)
interface Car {
name: string
}
interface Tesla extends Car {
fuel: boolean
}
type Car = {
name: string
}
type Tesla = Car & {
fuel: boolean
} |
Beta Was this translation helpful? Give feedback.
-
타입 시스템은 버그를 마술처럼 제거하는게 아니라, 처리되지 않는 조건을 지적하고 이것을 제대로 다루기를 요청합니다. boolean, number, string, array, tuple, enum, null, undefined, object📚 booleanlet isDone: boolean = false; 📚 numberJavaScript처럼, TypeScript의 모든 숫자는 부동 소수 값이다. 16진수, 10진수, 2진수, 8진수 리터럴을 지원한다. let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744; 📚 stringlet color: string = "blue";
color = 'red'; let fullName: string = `Bob Bobbington`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ fullName }.
I'll be ${ age + 1 } years old next month.`; 📚 array배열 타입은 두 가지 방법이 존재한다. 배열 요소들을 나타내는 타입 뒤에 let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3]; 📚 tuple튜플 타입을 사용하면, 요소의 타입과 개수가 고정된 배열을 표현할 수 있다. // 튜플 타입으로 선언
let x: [string, number];
// 초기화
x = ["hello", 10]; // 성공
// 잘못된 초기화
x = [10, "hello"]; // 오류
console.log(x[0].substring(1)); // 성공
console.log(x[1].substring(1)); // 오류, 'number'에는 'substring' 이 없습니다. 정해진 인덱스 외에 다른 인덱스에 있는 요소에 접근하면, 오류가 발생하며 실패한다. x[3] = "world"; // 오류, '[string, number]' 타입에는 프로퍼티 '3'이 없습니다.
console.log(x[5].toString()); // '[string, number]' 타입에는 프로퍼티 '5'가 없습니다.
const days = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'] as const;
// type Days = 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | 'sun';
type Days = typeof days[number];
{
0: 'Mon',
1: 'Tue,
...
readonly length: 7 // number가 아닌 7이 들어있음.
} 📚 enum
enum Color {Red, Green, Blue}
let c: Color = Color.Green; 기본적으로 enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;
enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];
console.log(colorName); // 값이 2인 'Green'이 출력됩니다. 📚 null, undefined
// 이 밖에 이 변수들에 할당할 수 있는 값이 없습니다!
let u: undefined = undefined;
let n: null = null;
📚 object
declare function create(o: object | null): void;
create({ prop: 0 }); // 성공
create(null); // 성공
create(42); // 오류
create("string"); // 오류
create(false); // 오류
create(undefined); // 오류 Type assertions (타입 단언)
타입 단언에는 let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
let strLength_: number = (someValue as string).length; |
Beta Was this translation helpful? Give feedback.
-
Union Types유니언 타입은 여러 타입 중 하나가 될 수 있는 값을 의미한다. 세로 막대 function padLeft(value: string, padding: string | number) {
// ...
} 공통 필드를 갖는 유니언유니언 타입인 값이 있으면, 유니언에 있는 모든 타입에 공통인 멤버들에만 접근할 수 있다. interface Bird {
fly(): void;
layEggs(): void;
}
interface Fish {
swim(): void;
layEggs(): void;
}
declare function getSmallPet(): Fish | Bird;
let pet = getSmallPet();
pet.layEggs();
// 두 개의 잠재적인 타입 중 하나에서만 사용할 수 있습니다.
pet.swim(); 만약 변수가 실제로 런타임에 Fish이면, pet.fly()를 호출하는 것은 오류이다. 유니언 구별하기리터럴 값을 정해서 switch문을 작성하여 구별할 수 있다. type NetworkLoadingState = {
state: "loading";
};
type NetworkFailedState = {
state: "failed";
code: number;
};
type NetworkSuccessState = {
state: "success";
response: {
title: string;
duration: number;
summary: string;
};
};
// 위 타입들 중 단 하나를 대표하는 타입을 만들었지만,
// 그것이 무엇에 해당하는지 아직 확실하지 않습니다. 따라서 switch로 state를 확인한뒤 코드를 작성한다.
type NetworkState =
| NetworkLoadingState
| NetworkFailedState
| NetworkSuccessState; Intersection Types교차 타입은 여러 타입을 하나로 결합한다. 예를들어, interface ErrorHandling {
success: boolean;
error?: { message: string };
}
interface ArtworksData {
artworks: { title: string }[];
}
interface ArtistsData {
artists: { name: string }[];
}
// 이 인터페이스들은
// 하나의 에러 핸들링과 자체 데이터로 구성됩니다.
type ArtworksResponse = ArtworksData & ErrorHandling;
type ArtistsResponse = ArtistsData & ErrorHandling;
const handleArtistsResponse = (response: ArtistsResponse) => {
if (response.error) {
console.error(response.error.message);
return;
}
console.log(response.artists);
}; |
Beta Was this translation helpful? Give feedback.
-
주제 키워드는
✨Type✨
입니다.
☘️ 하위 주제 키워드
⏳스레드에 각 페어당 소요시간 적어주세요!
(ex) holee 90분 소요
Beta Was this translation helpful? Give feedback.
All reactions