23.07.26
splice() 메서드
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
sort는 원본 배열의 영향을 줌
Number() 로 해주면 true === 1 ; false === 0;
filter는 값이 없으면 빈배열을 반환해줘서
삼항연산자를 사용하면 true가 나옴
4-1 enum과 object literal 비교
enum은 열거형 데이터 타입 / 가독성을 높여주기도 하고 명확한 상수 값을 정의할 수 있어서 상수(재할당 불가능한 타입)의 그룹화할 때 사용하면 좋음 (* 컴파일 시 따로 데이터를 할당하지 않았다면 자동으로 숫자 값(1 or 0)이 매핑됨)
object literal
enum과 비교해 object literal이 갖는 장점
1. enum은 number나 string 타입의 데이터만 대입할 수 있으나 객체 리터럴에서는 어떤 타입의 데이터든 대입할 수 있어 유연한 구조를 갖고 있음
2. 코드 내에서 사용하기 전에 할당되어야 해서 런타임 에러를 방지할 수 있음
enum과 object literal의 더 적합한 사용법
enum : ‘간단한’ 상수 값을 그룹화해서 관리할 때 적합
각 멤버의 데이터 타입들이 모두 상수 값이기 때문에 각 데이터 값이 변하면 안됨
object literal : 멤버의 값이나 데이터 타입을 마음대로 변경 가능 (즉, 상수뿐만 아니라 변수도 가능)
enum보다 복잡한 구조와 다양한 데이터 타입을 사용해야 할 때 사용하면 적합
4-2 ~ 4-3 유틸리티 타입
interface Person {
name: string;
age: number;
}
const updatePerson = (person: Person, fields: Partial): Person => {
return { ...person, ...fields };
};
const person: Person = { name: "Spartan", age: 30 };
const changedPerson = updatePerson(person, { age: 31 });
interface Person {
name: string;
age: number;
address?: string; // ?는 선택적 속성 : 있어도 되고 없어도 됨
}
그러나 address를 type RequiredPerson = Required; 이런식으로 Required 타입으로 선언하면 무조건 필수로 입력해야함
그렇다면 여기서 불변 객체란 ? 객체 생성 후 내부의 상태를 바꿀 수 없는 객체를 의미
interface DatabaseConfig {
host: string;
readonly port: number; // 인터페이스에서도 readonly 타입 사용 가능해요!
}
const mutableConfig: DatabaseConfig = {
host: "localhost",
port: 3306,
};
const immutableConfig: Readonly = {
host: "localhost",
port: 3306,
};
mutableConfig.host = "somewhere";
immutableConfig.host = "somewhere"; // 오류!
interface Person {
name: string;
age: number;
address: string;
}
type SubsetPerson = Pick<Person, "name" | "age">;
const person: SubsetPerson = { name: "Spartan", age: 30 };
Person에는 address가 포함되어있지만 만약 address 속성을 제외하고 새로운 타입의 객체를 만들고 싶다면 ??
=> 위처럼 작성하면 name과 age 속성만 포함하는 객체를 만들어줄 수 있음
ꖶዞ 사용하냐면 ? 만약 속성이 30개 있는데 사용하고 싶은 속성은 27개고 사용하지 않을 속성이 3개라면 3개를 제외하고 새 타입의 객체를 생성하는 것이 효율적이기 때문에 !!
interface Person {
name: string;
age: number;
address: string;
}
type SubsetPerson = Omit<Person, "address">;
const person: SubsetPerson = { name: "Alice", age: 30 };
추가적인 유틸리티 타입들 …
https://www.typescriptlang.org/ko/docs/handbook/utility-types.html
4-4 ~ 4-7 프로그램 실습
(오류)
./dist 폴더가 없어서 nam run start에서 오류가 남
--outDir ./dist
컴파일이 된 파일들이 들어가는 디렉토리는 dist 디렉토리입니다.
// 이거를 해주지 않아서 그랬음
vscode 확인 !!!!!!!!!!!!!!!!!!!