22.03.16 TypeScript
21320 ワード
typescript基本
設定
npm install typescript
yarn add typescript
npx tscファイル名(コマンド、コンパイラ、typescriptファイルをjsファイルとして作成します).
typescriptはブラウザでは使用できません.
だからコンパイルでjsに変換して使う必要があります!
拡張子はtsです.
基本構文
Primitives: number, string, boolean, boolean, null, undifined
function add(a: number, b: number) { //type을 정해준다. 그래서 오류를 방지.
return a + b;
}
const result = add("2", "5"); // npx tsc with-typescript.ts로 컴파일링을 하면 type이 맞지 않아서 오류 발생.
console.log(result);
let age: number = 24;
age = "12"; //오류, 위에 number type으로 typescript가 지정을 해놓았는데 string type을 넣었기 때문에 오류임
age = 12; // 오류나지 않음.
nullとundefinedは異なる方法で、通常は上記のように書かれません.
More complex types: arrays, objects
let hobbies: string[]; //배열. 취미들을 넣어놓은 것은 배열일 것이기 때문에 이런 식으로 쓴다. hobbies 안에 문자열 배열을 넣고 싶다는 //number[], boolean[] 다 가능.
hobbies = ["Sports", "Cooking"]; // 오류나지 않음.
//let person: any; //모든 것이 가능하다. 일반적으로 잘 안 쓴다,
//let person: {}; //객체 타입을 사용하겠다고 정의하는 것
let person: {
name: string;
age: number; // 객체인데 이렇게 생긴 것만 사용하겠다는 뜻이다.
};
person = {
name: "Max",
age: 32,
}; // 오류나지 않는다.
let people: {
name: string;
age: number;
}[]; //이런 타입의 객체가 들어있는 배열을 정의하는 것이다.
類型推論
typescriptが変数に再割り当てしようとすると、course:stringと呼ぶ必要がなくても、タイプ推論を利用してエラーを自動的に区別します.let course = "react the Complete Guide"; //둘 이상의 유형을 승인하고 싶을 때는 |를 사용!!
course = 12345; // 오류
course = "12345" // 오류가 나지 않는다.
let course: string | number = "react the Complete Guide"; //둘 이상의 유형을 승인하고 싶을 때는 |를 사용!!
course = 12345;
Alias-再利用を避ける
typescript特有の文法でtypeというキーワードがあります.
コンパイル時にjs構文ではないため、重複を防止します.
タイプを設定するだけです!type Person = {
name: string;
age: number;
}; //Person이라는 것에 타입을 저장. 이름은 무엇이든 와도 된다.
let person: Person;
person = {
name: "Max",
age: 32,
}; //오류가 나지 않는다.
let people: Person[]; //Person 유형의 객체를 가진 배열
n.関数
function add(a: number, b: number): number | string {
// 이렇게 뒤에 :를 쓰면 반환 유형을 지정할 수 있다. 하지만 typescript는 유형추론이 가능하기 때문에 특별한 것이 아니면 굳이 써 줄 필요가 없다.
return a + b;
}
void
voidは、返すべき内容がないことを示す.
nullとunfinedを表します.function print(value: any) {
// 단순히 콘솔로그로 보여주는것이기 때문에 값의 유형은 중요하지 않다.
console.log(value); //이 함수의 문제점은 자바스크립트에 print라는 함수가 기본적을 존재하기 때문에 충돌이 일어날 수 있다. 그래서 이름은 printOrOut 등 이런 식으로 바꿔주어야 한다.
} // 이 함수는 리턴으로 반환하는 값이 없기 때문에 print의 유형은 특수한 void라는 유형이다. void는 null과 undifined를 의미. 즉 리턴할 게 없다!
Generics
関数に多くのパラメータがあり、関数を再使用する必要がある場合、typescriptはどのタイプでもタイプを正確に推定する必要がありますが、できない場合は構文を使用します.function insertAtBeginning(array: any[], value: any) {
const newArray = [value, ...array];
return newArray; // 단순히 원본이 변하지 않는 새로운 배열을 만들어주는 배열(기존 것)
}
const demoArray = [1, 2, 3];
const updatedArray = insertAtBeginning(demoArray, -1); // [-1, 1, 2, 3]
updatedArray[0].split(""); // 오류가 나지 않는다. 이유는 위에 updatedArray에서 보면 typescript가 any로 유형을 추론하고 있기 때문이다. 하지만 insertAtBeginning에서 array 유형을 any가 아닌 number로 바꾸면 다른 유형에서 다시 쓸 수가 없기 때문에 지정이 불가능하다. 그러므로 이럴 경우에 updatedArray의 오류를 수정하기 위해서 쓰는 문법이 //!Generics다!
function insertAtBeginning<T>(array: T[], value: T) { //typescript에만 있는 문법으로, T를 이런식으로 넣으면 typescript는 array와 value의 유형이 일치해야한다는 것을 인식하고 더 자세하게 보게 된다. 그래서 원래는 updateAarray가 any로 인식을 하여 split을 오류처리를 안 했지만, Generics를 사용하여 이 두 가지가 숫자 타입이라는 것을 인식하여 제대로 인식을 한다.
const newArray = [value, ...array];
return newArray;
}
const demoArray = [1, 2, 3];
const stringArray = insertAtBeginning(['a', 'b', 'c'], 'd')//type을 string으로 잘 받아들인다.
const updatedArray = insertAtBeginning(demoArray, -1); // [-1, 1, 2, 3]
updatedArray[0].split(""); // type을 다 제대로 보기 때문에 오류가 난다.
<T>를 명시적으로 쓸 수 있다.
const stringArray = insertAtBeginning<string>(["a", "b", "c"], "d");
제네릭 자세히 살펴보기
다음 예제 배열을 보자.
let numbers = [1, 2, 3];
여기서 유형이 유추되지만 명시적으로 할당하면 다음과 같이 할 수 있다.
let numbers: number[] = [1, 2, 3];
number[] 는 TypeScript 표기법으로써 "이것은 숫자의 배열입니다" 라고 정의하는 것.
그러나 실제로, number[]는 문법적 설탕이다.
실제 유형은 Array이다. 모든 배열은 Array 유형이다.
그러나 배열 유형은 배열의 항목 유형도 설명하는 경우에만 의미가 있으므로 Array 은 실제로는 제네릭 유형이다.(?????)
위의 예를 다음과 같이 작성할 수도 있다.
let numbers: Array<number> = [1, 2, 3];
여기에 다시 꺾쇠 괄호(<>)가 있다!
그러나 이번에는 우리 자신의 유형을 만드는 것이 아니라 TypeScript에 실제 유형이 "generic type placeholder"에 사용되야 한다고 하는 것이다. (T).
TypeScript는 이것을 추론할 수도 있다.
우리는 다음과 같이 작성할 때 그것에 의존한다.
let numbers = [1, 2, 3];
그러나 명시적으로 유형을 설정하려면 다음과 같이 할 수 있다.
let numbers: Array<number> = [1, 2, 3];
물론 이 길고 투박한 유형을 작성하는 것은 약간 성가실 수 있다.
그래서 배열에 대해 다음과 같은 대안(문법적 설탕)이 있다.
let numbers: number[] = [1, 2, 3];
예를 들면 자리 표시자에 대한 구체적인 유형을 설정할 수도 있습니다. T.명시적으로.
const stringArray = insertAtBeginning<string>(['a', 'b', 'c'], 'd');
따라서 꺾쇠 괄호를 사용하여 제네릭 유형을 정의할 수 있을 뿐만 아니라 제네릭 유형을 사용하고 사용해야 하는 자리 표시자 유형을 명시적으로 설정할 수도 있다.
때로는 TypeScript가 (올바른) 유형을 유추할 수 없는 경우에 필요하다.
Reference
この問題について(22.03.16 TypeScript), 我々は、より多くの情報をここで見つけました
https://velog.io/@hongwr/22.03.16-TypeScript
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Primitives: number, string, boolean, boolean, null, undifined
function add(a: number, b: number) { //type을 정해준다. 그래서 오류를 방지.
return a + b;
}
const result = add("2", "5"); // npx tsc with-typescript.ts로 컴파일링을 하면 type이 맞지 않아서 오류 발생.
console.log(result);
let age: number = 24;
age = "12"; //오류, 위에 number type으로 typescript가 지정을 해놓았는데 string type을 넣었기 때문에 오류임
age = 12; // 오류나지 않음.
nullとundefinedは異なる方法で、通常は上記のように書かれません.More complex types: arrays, objects
let hobbies: string[]; //배열. 취미들을 넣어놓은 것은 배열일 것이기 때문에 이런 식으로 쓴다. hobbies 안에 문자열 배열을 넣고 싶다는 //number[], boolean[] 다 가능.
hobbies = ["Sports", "Cooking"]; // 오류나지 않음.
//let person: any; //모든 것이 가능하다. 일반적으로 잘 안 쓴다,
//let person: {}; //객체 타입을 사용하겠다고 정의하는 것
let person: {
name: string;
age: number; // 객체인데 이렇게 생긴 것만 사용하겠다는 뜻이다.
};
person = {
name: "Max",
age: 32,
}; // 오류나지 않는다.
let people: {
name: string;
age: number;
}[]; //이런 타입의 객체가 들어있는 배열을 정의하는 것이다.
類型推論
typescriptが変数に再割り当てしようとすると、course:stringと呼ぶ必要がなくても、タイプ推論を利用してエラーを自動的に区別します.
let course = "react the Complete Guide"; //둘 이상의 유형을 승인하고 싶을 때는 |를 사용!!
course = 12345; // 오류
course = "12345" // 오류가 나지 않는다.
let course: string | number = "react the Complete Guide"; //둘 이상의 유형을 승인하고 싶을 때는 |를 사용!!
course = 12345;
Alias-再利用を避ける
typescript特有の文法でtypeというキーワードがあります.
コンパイル時にjs構文ではないため、重複を防止します.
タイプを設定するだけです!
type Person = {
name: string;
age: number;
}; //Person이라는 것에 타입을 저장. 이름은 무엇이든 와도 된다.
let person: Person;
person = {
name: "Max",
age: 32,
}; //오류가 나지 않는다.
let people: Person[]; //Person 유형의 객체를 가진 배열
n.関数
function add(a: number, b: number): number | string {
// 이렇게 뒤에 :를 쓰면 반환 유형을 지정할 수 있다. 하지만 typescript는 유형추론이 가능하기 때문에 특별한 것이 아니면 굳이 써 줄 필요가 없다.
return a + b;
}
void
voidは、返すべき内容がないことを示す.
nullとunfinedを表します.
function print(value: any) {
// 단순히 콘솔로그로 보여주는것이기 때문에 값의 유형은 중요하지 않다.
console.log(value); //이 함수의 문제점은 자바스크립트에 print라는 함수가 기본적을 존재하기 때문에 충돌이 일어날 수 있다. 그래서 이름은 printOrOut 등 이런 식으로 바꿔주어야 한다.
} // 이 함수는 리턴으로 반환하는 값이 없기 때문에 print의 유형은 특수한 void라는 유형이다. void는 null과 undifined를 의미. 즉 리턴할 게 없다!
Generics
関数に多くのパラメータがあり、関数を再使用する必要がある場合、typescriptはどのタイプでもタイプを正確に推定する必要がありますが、できない場合は構文を使用します.
function insertAtBeginning(array: any[], value: any) {
const newArray = [value, ...array];
return newArray; // 단순히 원본이 변하지 않는 새로운 배열을 만들어주는 배열(기존 것)
}
const demoArray = [1, 2, 3];
const updatedArray = insertAtBeginning(demoArray, -1); // [-1, 1, 2, 3]
updatedArray[0].split(""); // 오류가 나지 않는다. 이유는 위에 updatedArray에서 보면 typescript가 any로 유형을 추론하고 있기 때문이다. 하지만 insertAtBeginning에서 array 유형을 any가 아닌 number로 바꾸면 다른 유형에서 다시 쓸 수가 없기 때문에 지정이 불가능하다. 그러므로 이럴 경우에 updatedArray의 오류를 수정하기 위해서 쓰는 문법이 //!Generics다!
function insertAtBeginning<T>(array: T[], value: T) { //typescript에만 있는 문법으로, T를 이런식으로 넣으면 typescript는 array와 value의 유형이 일치해야한다는 것을 인식하고 더 자세하게 보게 된다. 그래서 원래는 updateAarray가 any로 인식을 하여 split을 오류처리를 안 했지만, Generics를 사용하여 이 두 가지가 숫자 타입이라는 것을 인식하여 제대로 인식을 한다.
const newArray = [value, ...array];
return newArray;
}
const demoArray = [1, 2, 3];
const stringArray = insertAtBeginning(['a', 'b', 'c'], 'd')//type을 string으로 잘 받아들인다.
const updatedArray = insertAtBeginning(demoArray, -1); // [-1, 1, 2, 3]
updatedArray[0].split(""); // type을 다 제대로 보기 때문에 오류가 난다.
<T>를 명시적으로 쓸 수 있다.
const stringArray = insertAtBeginning<string>(["a", "b", "c"], "d");
제네릭 자세히 살펴보기
다음 예제 배열을 보자.
let numbers = [1, 2, 3];
여기서 유형이 유추되지만 명시적으로 할당하면 다음과 같이 할 수 있다.
let numbers: number[] = [1, 2, 3];
number[] 는 TypeScript 표기법으로써 "이것은 숫자의 배열입니다" 라고 정의하는 것.
그러나 실제로, number[]는 문법적 설탕이다.
실제 유형은 Array이다. 모든 배열은 Array 유형이다.
그러나 배열 유형은 배열의 항목 유형도 설명하는 경우에만 의미가 있으므로 Array 은 실제로는 제네릭 유형이다.(?????)
위의 예를 다음과 같이 작성할 수도 있다.
let numbers: Array<number> = [1, 2, 3];
여기에 다시 꺾쇠 괄호(<>)가 있다!
그러나 이번에는 우리 자신의 유형을 만드는 것이 아니라 TypeScript에 실제 유형이 "generic type placeholder"에 사용되야 한다고 하는 것이다. (T).
TypeScript는 이것을 추론할 수도 있다.
우리는 다음과 같이 작성할 때 그것에 의존한다.
let numbers = [1, 2, 3];
그러나 명시적으로 유형을 설정하려면 다음과 같이 할 수 있다.
let numbers: Array<number> = [1, 2, 3];
물론 이 길고 투박한 유형을 작성하는 것은 약간 성가실 수 있다.
그래서 배열에 대해 다음과 같은 대안(문법적 설탕)이 있다.
let numbers: number[] = [1, 2, 3];
예를 들면 자리 표시자에 대한 구체적인 유형을 설정할 수도 있습니다. T.명시적으로.
const stringArray = insertAtBeginning<string>(['a', 'b', 'c'], 'd');
따라서 꺾쇠 괄호를 사용하여 제네릭 유형을 정의할 수 있을 뿐만 아니라 제네릭 유형을 사용하고 사용해야 하는 자리 표시자 유형을 명시적으로 설정할 수도 있다.
때로는 TypeScript가 (올바른) 유형을 유추할 수 없는 경우에 필요하다.
Reference
この問題について(22.03.16 TypeScript), 我々は、より多くの情報をここで見つけました https://velog.io/@hongwr/22.03.16-TypeScriptテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol