Typescript ๊ธฐ์ด1
Typescript ๊ธฐ์ด1 ๐
๋ณ์๋ฅผ ์ ์ธํ ๋๋ type์ ์ง์ ํด์ค์ผ ํ๋ค๊ณ ๋ฐฐ์ ๋ค.
ํ์ง๋ง ์ฌ์ค TS๊ฐ ์๋์ผ๋ก ํ์ ์ ์ง์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ํ๋ํ๋ ์ ๋ถ ํ์ ์ง์ ์ ํด์ค ํ์๊ฐ ์๋ค.
let a = 'kk';
a = 123; // ERROR
ํ์ ์ ๋ฏธ๋ฆฌ ์ง์ ํ๊ธฐ ์ ๋งคํ ๋
- Union Type ์ฌ์ฉ
var ์ด๋ ์ด: (number | string)[] = [1, '2', 3];
var ์ค๋ธ์ ํธ: { data: number | string } = { data: '123' };
- any ์ฌ์ฉ
let a: any;
a = 123;
a = 'asd';
let b: number = a; // NO ERROR
ํ์ ์ด ๋ฌ๋ผ๋ ์๋ฌ๋ฅผ ๋์ฐ์ง์๋๋ค. ์ฌ์ฉํ์ง ์๋๊ฑธ ๊ถ์ฅํ๋ค.
- unKnown ์ฌ์ฉ
let a: unknown;
a = 123;
a = 'asd';
let b: number = a; // ERROR
unknown์ ์๋ฌดํ์ ์ด๋ ์๊ด์์ด ๋์ง๋ง ์ด๊ฒ์ ๋์ ํ๋ คํ ๋๋ ์๋ฌ๋ฅผ ๋์ด๋ค
(any๋์ unknown์ ํ์ฉํ๋๋ก ํ์)
void
function a(x: number): void {
1 + 1;
}
return์ ํ์๋๊ฒ์ ์๋ฐฉ ํ ์ ์๋ค.
function a(x: number): number {
return x + 1;
}
a(3); // ํ๋ผ๋ฏธํฐ ํ์
function a(x?: number): number {
return x + 1;
}
a(); // ๊ฐ๋ฅ
x?: number
๋ x: number | undefined
์ ๊ฐ๋ค.
Type Narrowing
function a(x: number | string) {
if (typeof x === 'string') {
return x + '1';
} else {
return x + 1;
}
}
if๋ฌธ์ผ๋ก ํ์ ์ ํ๋๋ก ํ์ ์ง์ด ์ค๋ค.
( in, instanceof ์ผ๋ก๋ ๊ฐ๋ฅ )
(Array.isArray(x.subject)
)
Type Assertion
function a(x: number | string) {
let array: number[] = [];
array[0] = x as number;
}
x๋ฅผ number๋ก ๋ฎ์ด ์์์ค๋ค.
ํ์ง๋ง ์ด๊ฑธ ๋จ์ฉํ๋ฉด ๋น ๋ฐ๋ฅผ ๋ง๋๋ค.
- narrowing์ ํ ๋ ์ฆ ํ์ ์ ํ์ ์ง์๋๋ง ์ฌ์ฉ.
- ์ด๋ค ํ์ ์ด ๋ค์ด์ฌ์ง ํ์คํ๊ฒ ์๊ณ ์์๋๋ง ์ฌ์ฉ.
- ๋น์์ฉ์ผ๋ก๋ง.
Type Aliases
type Animal = string | number | undefined;
let ๋๋ฌผ: Animal;
์์๊ฐ์ด ํ์ ์ ๋ณ์ํํด์ ๊ด๋ฆฌํ๋๊ฒ์ ํ์ ์๋ฆฌ์ด์ค๋ผ๊ณ ํ๋ค.
( ๋๋ฌธ์๋ก ๊ด๋ฆฌํ๋๊ฒ์ด ๊ตญ๋ฃฐ์ด๋ค. )
type a = string;
type b = numbers;
type c = a | b;
์ด๊ฒ๋ ๊ฐ๋ฅ
type PositionX = { x: number };
type PositionY = { y: number };
type XandY = PositionX & PositionY;
let ์ขํ: XandY = { x: 1, y: 2 };
์ด๋ ๊ฒ๋ ๊ฐ๋ฅ
type a = (a: string) => number;
let b: a = () => {};
readonly
type Girlfriend = {
readonly name: string;
};
let ์ฌ์น: Girlfriend = {
name: '์ ๋ฒ',
};
์ฌ์น.name = '์ ๋ผ'; //readonly๋ผ์ ์๋ฌ
JS์์๋ const๋ก object์ ๊ฐ์ ๋ฐ๊พธ๋ฉด ์๋ฌ๊ฐ ๋จ์ง ์์ง๋ง
TS์์๋ readonly๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฌ๋ฅผ ๋จ๊ฒํ ์ ์๋ค.