TS 대상 확장 연산 자 와 rest 연산 자 를 자세히 설명 합 니 다.
TypeScript 2.1 은 대상 확장 연산 과 rest 속성 제안 에 대한 지원 을 추 가 했 고 이 제안 은 ES 2018 에서 표준화 되 었 다.rest 와 spread 속성 을 유형 안전 한 방식 으로 사용 할 수 있 습 니 다.
대상 rest 속성
세 가지 속성 을 가 진 간단 한 글자 의 대상 을 정의 했다 고 가정 합 니 다.
const marius = {
  name: "Marius Schulz",
  website: "https://mariusschulz.com/",
  twitterHandle: "@mariusschulz"
};
const { name, website, twitterHandle } = marius;
name;          // Type string
website;       // Type string
twitterHandle; // Type string
const { twitterHandle, ...rest } = marius;
twitterHandle; // Type string
rest; // Type { name: string; website: string; }대상 확장 속성
만약 우리 가 fetch()API 를 사용 하여 HTTP 요청 을 보 내 기 를 원한 다 면.이것 은 두 개의 인 자 를 받 아들 입 니 다.하나의 URL 과 하나의 options 대상,options 는 요청 한 모든 사용자 정의 설정 을 포함 합 니 다.
응용 프로그램 에 서 는 fetch()호출 을 패키지 하고 기본 옵션 과 주어진 요청 의 특정 설정 을 덮어 쓸 수 있 습 니 다.이 설정 항목 들 은 다음 과 같 습 니 다.
const defaultOptions = {
  method: "GET",
  credentials: "same-origin"
};
const requestOptions = {
  method: "POST",
  redirect: "follow"
};
// Type { method: string; redirect: string; credentials: string; }
const options = {
  ...defaultOptions,
  ...requestOptions
};
console.log(options);
// {
//   method: "POST",
//   credentials: "same-origin",
//   redirect: "follow"
// }물론 TypeScript 는 이런 순 서 를 이해 합 니 다.따라서 여러 확장 대상 이 같은 키 로 속성 을 정의 하면 결과 대상 에서 이 속성의 유형 은 마지막 할당 의 속성 유형 이 될 것 입 니 다.이전 할당 의 속성 을 덮어 쓰기 때 문 입 니 다.
const obj1 = { prop: 42 };
const obj2 = { prop: "Hello World" };
const result1 = { ...obj1, ...obj2 }; // Type { prop: string }
const result2 = { ...obj2, ...obj1 }; // Type { prop: number }대상 확장 은 대상 을 만 드 는 얕 은 복사 에 사용 할 수 있 습 니 다.만약 에 우리 가 새로운 대상 을 만 들 고 모든 속성 을 복사 해서 기 존의 todo 항목 에서 새로운 todo 항목 을 만 들 고 싶다 면 대상 을 사용 하면 쉽게 할 수 있 습 니 다.
const todo = {
  text: "Water the flowers",
  completed: false,
  tags: ["garden"]
};
const shallowCopy = { ...todo };
console.log(todo === shallowCopy);
// false
console.log(shallowCopy);
// {
//   text: "Water the flowers",
//   completed: false,
//   tags: ["garden"]
// }
hallowCopy.text = "Mow the lawn";
console.log(shallowCopy);
// {
//   text: "Mow the lawn",
//   completed: false,
//   tags: ["garden"]
// }
console.log(todo);
// {
//   text: "Water the flowers",
//   completed: false,
//   tags: ["garden"]
// }
shallowCopy.tags.push("weekend");
console.log(shallowCopy);
// {
//   text: "Mow the lawn",
//   completed: false,
//   tags: ["garden", "weekend"]
// }
console.log(todo);
// {
//   text: "Water the flowers",
//   completed: false,
//   tags: ["garden", "weekend"]
// }keyof 와 찾기 형식
JS 는 고도 의 동적 언어 다.정적 유형 시스템 에서 어떤 조작의 의 미 를 포착 하 는 것 은 때때로 매우 까다 로 울 수 있다.간단 한 prop 함 수 를 예 로 들 면:
function prop(obj, key) {
  return obj[key];
}그러면 어떻게 TypeScript 에서 이 함 수 를 작성 합 니까?먼저 시도 해 보 세 요.
 
 이 두 가지 유형의 주석 이 있 습 니 다.obj 는 대상 이 어야 하고 key 는 문자열 이 어야 합 니 다.우 리 는 지금 이미 두 매개 변수의 가능 한 값 집합 을 제한 했다.그러나 TS 는 반환 형식 을 any 로 추정 합 니 다.
const todo = {
  id: 1,
  text: "Buy milk",
  due: new Date(2016, 11, 31)
};
const id = prop(todo, "id");     // any
const text = prop(todo, "text"); // any
const due = prop(todo, "due");   // anykeyof 조작 기호
JS 에서 속성 명 을 매개 변수 로 하 는 API 는 상당히 보편적 이지 만 아직 까지 그 API 에 나타 난 유형 관 계 는 표현 되 지 않 았 다.
TypeScript 2.1 키 of 연산 자 를 새로 추가 합 니 다.색인 형식 조회 나 keyof 를 입력 하 십시오.색인 형식 조회 keyof T 가 만 든 유형 은 T 의 속성 이름 입 니 다.만약 에 우리 가 다음 과 같은 Todo 인 터 페 이 스 를 정의 했다 고 가정 하면:
interface Todo {
  id: number;
  text: string;
  due: Date;
}
type TodoKeys = keyof Todo; // "id" | "text" | "due"색인 형식 조회
keyof 가 있 으 면 prop 함수 의 유형 주 해 를 개선 할 수 있 습 니 다.키 인자 로 임의의 문자열 을 받 아들 이 기 를 원 하지 않 습 니 다.반면,우 리 는 인자 key 가 실제 들 어 오 는 대상 의 유형 에 존재 하도록 요구 합 니 다.
function prop <T, K extends keyof T>(obj: T, key: K) {
  return obj[key]
}
const todo = {
  id: 1,
  text: "Buy milk",
  due: new Date(2016, 11, 31)
};
const id = prop(todo, "id");     // number
const text = prop(todo, "text"); // string
const due = prop(todo, "due");   // Date 
 컴 파일 러 가 잘못 보고 할 수 있 습 니 다.이것 은 아주 좋 습 니 다.이것 은 우리 가 존재 하지 않 는 속성 을 읽 으 려 고 하 는 것 을 막 습 니 다.
또 다른 실제 예제 입 니 다.TypeScript 컴 파일 러 와 함께 발 표 된 lib.es 2017.object.d.ts 형식 성명 파일 에서 Object.entries()방법 을 보십시오.
interface ObjectConstructor {
  // ...
  entries<T extends { [key: string]: any }, K extends keyof T>(o: T): [keyof T, T[K]][];
  // ...
}이상 은 TS 대상 확장 연산 자 와 rest 연산 자 에 대한 상세 한 내용 입 니 다.TS 대상 확장 연산 자 와 rest 연산 자 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
TypeScript 매핑 유형 및 더 나은 글꼴 유형 추정 이해이것은 유형 시스템에 대한 강력한 보충입니다.본질적으로, 맵 형식은 w가 맵 속성 형식을 통해 기존 형식에서 새로운 형식을 만들 수 있도록 합니다.우리가 지정한 규칙에 따라 기존 유형의 모든 속성을 변환합니다.변환된...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.