초보자 타자 강좌: 부족한 안내서 - 제2부분
27797 단어 typescriptbeginnersjavascript
TypeScript란 무엇입니까? 왜 사용해야 합니까?이 TypeScript 초보자 강좌를 통해 더 많은 정보를 알고 자바스크립트 코드에 유형을 추가하기 시작합니다!
최초 출판 valentinog.com/blog
이 세트에서 다음을 수행합니다.
우리 발가락을 타자 스크립트 유형으로 뻗어.
TypeScript는 유형을 중심으로 회전하며 코드에 유형이 전혀 없는 것처럼 보입니다.첨가할 때가 됐어.우리는 우선 함수 파라미터를 복원할 것이다.관찰 함수의 호출 방식을 통해 문자열을 매개 변수로 사용하는 것 같습니다.
filterByTerm("input string", "java");
확실합니까?함수에 첫 번째 형식의 주석을 추가합니다.방법은 다음과 같습니다.function filterByTerm(input: string, searchTerm: string) {
// omitted
}
// omitted
그렇습니다!매개변수에 유형을 추가하여 코드를 일반 JavaScript에서 TypeScript로 마이그레이션하고 있습니다.하지만 코드를 컴파일하려면:npm run tsc
다음은 발생 상황입니다.filterByTerm.ts:5:16 - error TS2339: Property 'filter' does not exist on type 'string'.
당신은 TypeScript가 어떻게 당신을 인도하는지 볼 수 있습니까?문제는 필터 기능입니다.function filterByTerm(input: string, searchTerm: string) {
// omitted
return input.filter(function(arrayElement) {
return arrayElement.url.match(regex);
});
}
"input"는 문자열이지만 나중에 코드에서 호출됩니다 filter method. 이것은 그룹에 속합니다.반대로 우리가 진정으로 원하는 것은'입력'을 어떤 물체 그룹으로 표시하는 것이다. 아마도 문자열 그룹일 것이다.이를 위해, 너는 두 가지 선택이 있다.[] 문자열이 있는 옵션 1:
function filterByTerm(input: string[], searchTerm: string) {
// omitted
}
또는 이 구문을 좋아한다면 배열이 있는 옵션 2를 선택하십시오.function filterByTerm(input: Array<string>, searchTerm: string) {
// omitted
}
개인적으로 나는 옵션 2를 더 좋아한다.이제 다음과 같이 컴파일 (npm 실행 tsc) 을 다시 시도해 보겠습니다.filterByTerm.ts:10:14 - error TS2345: Argument of type '"input string"' is not assignable to parameter of type 'string[]'.
filterByTerm("input string", "java");
나는 TypeScript가 우리를 단독으로 있게 하고 싶지 않다고 생각한다.그것을 책망하지 마십시오. 문자열 그룹으로 표시할 것입니다. 이제 문자열을 전송하려고 합니다.이것은 해결하기 쉽다!문자열 그룹을 전달합니다.filterByTerm(["string1", "string2", "string3"], "java");
다음은 지금까지의 전체 코드입니다.function filterByTerm(input: Array<string>, searchTerm: string) {
if (!searchTerm) throw Error("searchTerm cannot be empty");
if (!input.length) throw Error("input cannot be empty");
const regex = new RegExp(searchTerm, "i");
return input.filter(function(arrayElement) {
return arrayElement.url.match(regex);
});
}
filterByTerm(["string1", "string2", "string3"], "java");
나는 괜찮다고 생각한다.하지만 그렇지 않은 경우 (npm 실행 tsc):filterByTerm.ts:6:25 - error TS2339: Property 'url' does not exist on type 'string'.
네, 공평합니다.문자열 그룹을 전달하고 있지만, 잠시 후 코드에서 "url"이라는 속성에 접근하려고 합니다.return arrayElement.url.match(regex);
이것은 문자열 그룹이 아니라 대상 그룹이 필요하다는 것을 의미한다.우리 다음 절에서 이 문제를 해결합시다!초보자 TypeScript 자습서: TypeScript 객체 및 인터페이스
우리가 떠날 때, TypeScript는 filterByTerm이 문자열 그룹을 전달했기 때문에 불평을 했다.유형 문자열 TypeScript yelled에는 "url"속성이 없습니다.그런 다음 각 객체에 필요한 URL 속성이 있는 TypeScript의 객체 배열을 전달합니다.
filterByTerm(
[{ url: "string1" }, { url: "string2" }, { url: "string3" }],
"java"
);
그곳에 있을 때 함수 서명을 업데이트해서 대상 그룹을 받아들일 수 있도록 합니다.function filterByTerm(input: Array<object>, searchTerm: string) {
// omitted
}
이제 코드를 컴파일해 보겠습니다.npm run tsc
그리고 그 성과를 감상한다.filterByTerm.ts:6:25 - error TS2339: Property 'url' does not exist on type 'object'.
우리 또 왔어!적어도 TypeScript에서는 의미가 있습니다. 범용 JavaScript object 에는'url'이라는 속성이 없습니다.나에게 이것이 바로 TypeScript가 진정으로 빛나기 시작한 곳이다.그렇다면 JavaScript와 TypeScript 사이의 진정한 차이점은 무엇입니까?JavaScript에 유형이 없다는 것은 아닙니다.JavaScript는 유형이 있지만 느슨하고 동적입니다.나중에 코드에서 변수의 형식을 변경하거나 (거의) 모든 대상에 새 속성을 지정할 수 있습니다.
처음에는 외래 문법처럼 보이지만, 인터페이스에 익숙해지면 여기저기서 사용하기 시작한다.그런데 겸사겸사 인터페이스가 뭐예요?TypeScript의 인터페이스는 계약과 유사합니다.또는 다른 말로 하면 인터페이스는 마치 실체의'모델'과 같다.
우리의 코드를 보면 그 모양이 다음 모델에 부합해야 하는 대상에 대해 Link라는 간단한'모델'을 생각할 수 있다.
interface ILink {
url: string;
}
인터페이스 성명에 대해 우리는 "지금부터 내 TypeScript 코드에서 이 모양을 사용하고 싶다"고 말했다.물론 이것은 효과적인 JavaScript 문법이 아니므로 컴파일하는 과정에서 제거됩니다.팁: 인터페이스 앞에 대문자 I를 붙이는 것이 좋습니다. 이것은 TypeScript의 관례입니다.
이제 "input"매개변수를 수정하여 인터페이스 Ilink를 사용할 수 있습니다. 이 인터페이스는 사실상 사용자 정의 TypeScript 유형입니다.
function filterByTerm(input: Array<ILink>, searchTerm: string) {
// omitted
}
이 패치가 있으면 TypeScript "ILink 배열 기대"를 함수의 입력으로 사용할 수 있습니다.다음은 전체 코드입니다.interface ILink {
url: string;
}
function filterByTerm(input: Array<ILink>, searchTerm: string) {
if (!searchTerm) throw Error("searchTerm cannot be empty");
if (!input.length) throw Error("input cannot be empty");
const regex = new RegExp(searchTerm, "i");
return input.filter(function(arrayElement) {
return arrayElement.url.match(regex);
});
}
filterByTerm(
[{ url: "string1" }, { url: "string2" }, { url: "string3" }],
"java"
);
이 때 모든 오류가 사라져야 합니다. 실행할 수 있습니다.npm run tsc
컴파일 단계에서는 filterByTerm이라는 파일을 생성합니다.프로젝트 폴더에서 순수 JavaScript 코드를 사용하는 js입니다.파일을 보고 TypeScript 관련 선언이 어떻게 박리되는지 확인할 수 있습니다."always Strict"가true로 설정되어 있기 때문에 TypeScript 컴파일러도 filterByTerm의 맨 위에 "use strict"를 보냅니다.js.
첫 번째 TypeScript 코드가 잘 나왔어요!다음 절에서 우리는 인터페이스를 더욱 연구할 것이다.
초보자 TypeScript 자습서: 인터페이스 및 필드
TypeScript 인터페이스는 언어의 가장 강력한 구성 요소 중 하나입니다.인터페이스는 모든 개발자가 코드를 작성할 때 이 모양을 선택하고 이 모양을 따를 수 있도록 응용 프로그램에서'모델'을 형성하는 데 도움이 된다.
지금까지 우리는 간단한 인터페이스 ILink를 정의했습니다.
interface ILink {
url: string;
}
인터페이스에 더 많은 필드를 추가하려면 블록 내에서 해당 필드를 선언해야 합니다.interface ILink {
description: string;
id: number;
url: string;
}
이제 Ilink 유형의 모든 객체는 새 필드를 구현해야 합니다. 그렇지 않으면 오류가 발생합니다.실제로 코드를 컴파일하여 다음을 수행합니다.npm run tsc
TypeScript 소리 질러:filterByTerm.ts:17:4 - error TS2739: Type '{ url: string; }' is missing the following properties from type 'ILink': description, id
문제는 함수의 매개변수입니다.filterByTerm(
[{ url: "string1" }, { url: "string2" }, { url: "string3" }],
"java"
);
TypeScript는 함수 선언을 보고 매개변수가 ILink의 배열 유형임을 추정할 수 있습니다.따라서 이 배열의 모든 객체에는 인터페이스 ILink에 정의된 모든 필드가 있어야 합니다.대다수 상황에서 이것은 매우 최선이 아니다.Ilink 유형의 모든 새 객체에 모든 필드가 있는지 알 수 없습니다.걱정하지 마십시오. 컴파일이 통과될 수 있도록 인터페이스의 필드는 선택할 수 있습니다.
interface ILink {
description?: string;
id?: number;
url: string;
}
이제 편집기와 컴파일러가 모두 가능합니다.그러나 TypeScript 인터페이스는 더 많은 일을 할 수 있습니다. 다음 부분에서 확장을 볼 수 있습니다.그러나 먼저 TypeScript의 변수를 간략하게 설명합니다.초보자 TypeScript 자습서: 변수 입력
지금까지 함수의 매개변수에 유형을 추가하는 방법에 대해 알고 있습니다.
function filterByTerm(input: Array<ILink>, searchTerm: string) {
//
}
TypeScript는 이에 국한되지 않으며 모든 변수에 유형을 추가할 수도 있습니다.예시를 보여주기 위해서 함수의 매개 변수를 하나씩 추출합시다.먼저 각 객체를 추출합니다.const obj1: ILink = { url: "string1" };
const obj2: ILink = { url: "string2" };
const obj3: ILink = { url: "string3" };
TypeScript에 obj1, obj2, obj3이 Ilink 유형이라고 어떻게 말하는지 주의하십시오."vanilla"JavaScript에서 다음을 작성할 수 있습니다.const obj1 = { url: "string1" };
const obj2 = { url: "string2" };
const obj3 = { url: "string3" };
다음은 다음과 같은 Ilink 배열을 정의할 수 있습니다.const arrOfLinks: Array<ILink> = [obj1, obj2, obj3];
마지막 검색어:const term: string = "java";
다음은 전체 코드입니다.interface ILink {
description?: string;
id?: number;
url: string;
}
function filterByTerm(input: Array<ILink>, searchTerm: string) {
if (!searchTerm) throw Error("searchTerm cannot be empty");
if (!input.length) throw Error("input cannot be empty");
const regex = new RegExp(searchTerm, "i");
return input.filter(function(arrayElement) {
return arrayElement.url.match(regex);
});
}
const obj1: ILink = { url: "string1" };
const obj2: ILink = { url: "string2" };
const obj3: ILink = { url: "string3" };
const arrOfLinks: Array<ILink> = [obj1, obj2, obj3];
const term: string = "java";
filterByTerm(arrOfLinks, term);
네, 느꼈어요.JavaScript에 비해 TypeScript는 더 지루하고 때로는 군더더기처럼 보입니다.그러나 시간이 지날수록 코드가 튼튼해지는 것을 발견할 수 있다.유형 메모를 추가하여 TypeScript가 코드를 이해하는 데 도움이 되는 의도가 많을수록 나중에 좋습니다.너의 개발자 체험은 하늘을 찌를 것이다.
예를 들어 현재 arrOfLinks는 정확한 유형(ILink의 그룹)과 연결되어 있으며, 편집기는 인터페이스 ILink에서 정의한 것처럼 그룹의 모든 대상에 URL이라는 속성이 있음을 추정할 수 있습니다.
지금 나에게 이것은 결코 아름답지 않다고 말해라. 왜냐하면 확실히 그렇기 때문이다.TypeScript에는 문자열, 배열, 숫자 외에도 더 많은 유형이 있습니다.
부울, 원조, 임의, 여태껏, 매거진이 있다.시간의 추이에 따라 너는 이 모든 것을 배울 것이다.궁금하면 documentation for the basic types 을 보세요.
이제 인터페이스를 계속 확장합시다.
3부 계속 지켜봐주세요!
Reference
이 문제에 관하여(초보자 타자 강좌: 부족한 안내서 - 제2부분), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/valentinogagliardi/typescript-tutorial-for-beginners-the-missing-guide-part-2-3ahh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)