
μ€μΉ πͺ
npm install -g typescript
npx create-react-app my-app --template typescript
npm install --save typescript @types/node @types/react @types/react-dom @types/jest
λ¬Έλ²
let μ΄λ¦ :string = 'kim'
λ³μλ₯Ό λ§λ€ λ νμ μ§μ νκΈ°.λ³μλͺ : νμ λͺ μ΄λ κ² μ΄λ€
νμ μΌλ‘ μΈ μ μλ κ²λ€μ string, number,boolean, bigint, null, undefined,[], {} λ±μ΄ μμ΅λλ€.
let μ΄λ¦ :string = 'kim';
μ΄λ¦ = 123;
νμ
μ μ§μ ν΄λμΌλ©΄ νμ
μ΄ μλμΉ μκ² λ³κ²½λ κ²½μ° μλ¬λ©μΈμ§λ₯Ό λμμ€λ€.μΌ! μ΄κ±° μ«μμΌ!
let μ΄λ¦ :string[] = ['kim', 'Hong']
let λμ΄ :{ age : number } = { age : number }
array νΉμ object μλ£λ μ΄λ κ² νμ μ§μ μ΄ κ°λ₯
let μ΄λ¦ :string | number = 'kim';
μ΄ λ³μμ μ¬λ¬κ°μ§ νμ μ λ°μ΄ν°κ° λ€μ΄μ¬ μ μλ€λ©΄ | κΈ°νΈλ₯Ό μ΄μ©ν΄ or μ°μ°μλ₯Ό νν
type nameType = string | number;
let μ΄λ¦ :nameType = 'kim';
type ν€μλλ₯Ό μ΄μ©ν΄ νμ μ λ³μμ²λΌ λ΄μμ μ¬μ©κ°λ₯
type NameType = 'kim' | 'Hong';
let μ΄λ¦ :NameType = 'kim';
string number μ΄λ° κ² λΏλ§ μλλΌ λλ§μ νμ
μ λ§λ€μ΄ μ¬μ©κ°λ₯νλ€.
μνλ κΈμλ μ«μλ₯Ό μ
λ ₯νλ©΄ μ΄λ¦μ΄λΌλ λ³μμ μμΌλ‘ 'kim' λλ 'Hong'λ§ λ€μ΄μ¬ μ μλλ°, μ΄κ±Έ literal typeμ΄λΌκ³ ν¨
function ν¨μλͺ
(x :number) :number{
return x * 2
}
ν¨μλ νλΌλ―Έν°μ return κ°μ΄ μ΄λ€ νμ
μΌμ§λ₯Ό μ§μ ν μ μλ€.
λ€λ₯Έ νμ
μ΄ νλΌλ―Έν°λ‘ λ€μ΄μ€κ±°λ returnλ κ²½μ° μΌ λ νλ Έμ΄! λΌκ³ ν¨
ν¨μλ return νμ
μΌλ‘ voidλ₯Ό μ€μ κ°λ₯νλ° returnμ΄ μλμ§ μ²΄ν¬νλ€. (μ~ λ°μ κΈ°μ
)
//μλ¬
function ν¨μλͺ
(x :number | string) {
return x * 2
}
//κ°λ₯
function ν¨μλͺ
(x :number | string) {
if (typeof x === 'number'){
return x * 2
}
}
νμ
μ€ν¬λ¦½νΈλ μ§κΈ λ³μμ νμ
μ΄ νμ€νμ§ μμΌλ©΄ μ§λ©λλ‘ μ°μ°νμ§ μλλ€.
νμ νμ
μ΄ λ¬΄μμΈμ§ 미리 체ν¬νλ narrowing λλ assertion λ¬Έλ²μ μ¬μ©ν΄μΌ νλ½ν΄ μ€.
μ°Έκ³ νκΈ° : https://velog.io/@boorook/TypeScript-Narrowing-Assertion
type Member = [number, boolean];
let john:Member = [100, false]
array μλ£ μμ μμλ₯Ό ν¬ν¨ν΄μ μ΄λ€ μλ£κ° λ€μ΄μ¬μ§ μ νν μ§μ νκ³ μΆμΌλ©΄ tuple νμ μ μ°λ©΄ λ©λλ€. λκ΄νΈ [ ] μμ λ€μ΄μ¬ μλ£μ νμ μ μ°¨λ‘λ‘ μ μ΄μ£Όλ©΄ λ©λλ€.
type MyObject = {
name? : string,
age : number
}
let μ² μ :MyObject = {
name : 'kim',
age : 50
}
object νμ
λ μ μκ° λ무 κΈΈλ©΄ type ν€μλλ‘ λ³μμ λ΄μ λ²λ €~
type ν€μλ λμ λΉκ΅μ μ΅κ·Όμ λμ¨ interface ν€μλλ₯Ό μ΄μ©ν΄λ 무방νλ€
νΉμ μμ±μ΄ μ νμ¬νμ΄λ©΄ λ¬Όμνβ μ¨λ λ¨.
type MyObject = {
[key :string] : number,
}
let μ² μ :MyObject = {
age : 50,
weight : 100,
}
objectμμ μ΄λ€ μμ±μ΄ λ€μ΄κ°μ§ μμ§ λͺ¨λ₯Έλ€λ©΄??? μ λΆ μΈμ‘μμ νμ
μ§μ λ κ°λ₯
index signature λΌκ³ ν¨
νμ μ§μ νκΈ°
let μ΄λ¦ = 'kim';
let λμ΄ = 20;
μ΄λ κ²λ§ μ¨λ μλμΌλ‘ μ΄λ¦λ³μλ string,
λμ΄ λ³μλ numberλ₯Ό κ°μ§λ€
(λ³μλͺ
μ λ§μ°μ€ μ¬λ €λ³΄λ©΄ λ°λ‘λ°λ‘ νμΈκ°λ₯)
array, object λ§λ€ λλ μλμΌλ‘ μμμ λ¨
κ΅³μ΄ λ³΅μ‘νκ² νμ
λͺ
μν νμ μμ
let μ΄λ¦;
μ΄λ¦ = 'kim';
μ¬μ§μ΄ λ³μλ§ λ§λ€κ³
λμ€μ κ°μ μ¬κΈ°μ 'kim'μ ν λΉν΄λ νμ
μ΄ μλμΌλ‘ stringμΌλ‘ λ³ν¨
object μλ£ν
let favorite :{ song :string, singer :string } = { song : 'λΉλ°μ νμ', singer : 'IU' }
let project :{
member : string[],
days : number,
started : boolean,
} = {
member : ['kim', 'Hong'],
days : 20,
started : true,
}
ν¨μ
ν¨μμμ νμ μ§μ κ°λ₯ν λΆλΆμ λ κ°
- ν¨μλ‘ λ€μ΄μ€λ μλ£ (νλΌλ―Έν°)
- ν¨μμμ λκ°λ μλ£ (return)
function λ΄ν¨μ(x :number) :number {
return x * 2
}
- ν¨μλ‘ λ€μ΄μ€λ νλΌλ―Έν° νμ μ§μ μ νλΌλ―Έν° μμ μ λλ€.
- ν¨μκ° μ€νλ ν λ¨λ κ° (return μ°μΈ‘μ μλ κ°) νμ μ§μ νκ³ μΆμΌλ©΄ ν¨μλͺ () μ°μΈ‘μ μ μΌλ©΄ λ©λλ€.
ν¨μμ λ©μκ² νμ μ€λλ₯Ό μ₯μ°©νκΈ° λλ¬Έμ νλΌλ―Έν°μ 리ν΄κ°μ΄ μ΄μν΄μ§λ©΄ λλΌλλΌ μ€λ₯κ° λλ€~
- νλΌλ―Έν°μ νμ
μ μ§μ νλ©΄ νμ νλΌλ―Έν°κ° λ¨.
κ·Έλ¬λκΉ νλΌλ―Έν°λ₯Ό μ΅μ μΌλ‘ λκ³ μΆμΌλ©΄ λ¬Όμνλ₯Ό μ°λ©΄ λλΉ
function λ΄ν¨μ(x? :number) {
}
λ΄ν¨μ(); //κ°λ₯
λ΄ν¨μ(2); //κ°λ₯
x? x : number | undefinedλ μλ―ΈλΌκ³ μκ°νλ©΄ λ¨.
void
void λ 'μ무κ²λ μμ΄ κ³΅νν¨'μ λ»νλ νμ μΈλ° returnν μλ£κ° μλ ν¨μμ νμ μΌλ‘ μ¬μ©νλ©΄ λλ€.
function λ΄ν¨μ(x :number) :void {
return x * 2 //μ¬κΈ°μ μλ¬λ¨
}
κ·ΈλΌ μ΄μ μ΄ ν¨μμμ λκ°λ₯Ό returnνλ €κ³ ν λ μλ¬λ₯Ό λ
λλ€.
ν¨μμ return λ°©μ§μ₯μΉλ₯Ό μ£Όκ³ μΆμ λ void νμ
μ νμ©νλ©΄ λλ€.
μμ§μ μ°Έ μμν κΈ°λ₯..?
union type
function μλ¦ΏμμΈκΈ°(x :number | string){
return x + 1
}
μ΄λ κ² or μ°μ°μλ₯Ό μ¬μ©ν΄μ νλΌλ―Έν° νμ
μ μ§μ νλ©΄ μλ¬κ° λ¬λΉ
νμ
μ€ν¬λ¦½νΈμμλ μ΄λ° κ²½μ°λ₯Ό κΈμ§ μν΄
μ€κΉ? νμ
μ΄ νμ€νμ§κ° μμΌλκΉ μ΄ νλΌλ―Έν° μ체λ₯Ό μΌλ¨ λͺ» μ°κ² νλ κ²μ΄λ€.
function λ΄ν¨μ(x? :number) :number {
return x * 2
}
μ΄λ° μ½λλ μλλ€κ³ λμ¨λ€.
number λ§λλ° μ?
xλΌλ νλΌλ―Έν°λ μ΅μ
μ΄κ³ , μ΅μ
μΈ νλΌλ―Έν°λ number | undefined μ΄λ° μμΌλ‘ νμ
μ μκ° λκΈ° λλ¬Έμ
κ·Έλμ μμ§ xλΌλ νλΌλ―Έν°κ° λμ§ νμ€νμ§ μκΈ° λλ¬Έμ μλ¬ λΈλ€...
κ³Όμ
1
μ΄λ¦μ νλΌλ―Έν°λ‘ μ λ ₯νλ©΄ μ½μμ°½μ "μλ νμΈμ νκΈΈλ"μ μΆλ ₯ν΄μ£Όκ³ , μ무κ²λ νλΌλ―Έν°λ‘ μ λ ₯νμ§ μκ³ ν¨μλ₯Ό μ¬μ©νλ©΄ "μ΄λ¦μ΄ μμ΅λλ€" λ₯Ό μΆλ ₯νλ ν¨μ
function sayHi(x? :string ){
if (x) {
console.log('μλ
νμΈμ ' + x)
} else {
console.log('μμ
λ ₯μν¨')
}
}
2
ν¨μμ μ«μ λλ λ¬Έμλ₯Ό μ§μ΄λ£μΌλ©΄ μλ¦Ώμλ₯Ό μΈμ΄ μΆλ ₯ν΄μ£Όλ ν¨μ
function μλ¦ΏμμΈκΈ°(x :number | string) :number {
return x.toString().length
}
3
κ²°νΌ κ°λ₯ νλ₯ μ μλ €μ£Όλ ν¨μ
(μΈμ§’)
- ν¨μμ νλΌλ―Έν°λ‘ μμλ(λ§μλ¨μ), μ§λ³΄μ μ¬λΆ(true/false), λ§€λ ₯μ μ ('μ' or 'μ€' or 'ν') λ₯Ό μ λ ₯ν μ μμ΄μΌν©λλ€.
- μμλμ λ§μ λΉ 1μ , μ§λ³΄μ μ 500μ & 미보μ μ 0μ , λ§€λ ₯μ μλ 'μ'μΌ λλ§ 100μ μΌλ‘ κ³μ°ν©λλ€.
- μ΄ μ μκ° 600μ μ΄μμΌ κ²½μ° "κ²°νΌκ°λ₯"μ return ν΄μ€μΌν©λλ€. κ·Έ μΈμ μ무κ²λ returnνμ§ μμ΅λλ€.
function κ²°νΌκ°λ₯νλ(money :number, house :boolean, charm :string) :string|void{
let score :number = 0;
score += money;
if (house === true){
score += 500
}
if (charm === 'μ'){
score += 100
}
if (score >= 600){
return 'κ²°νΌκ°λ₯'
}
}
console.log(κ²°νΌκ°λ₯νλ(100,true,'μ'))
stringμ΄ μλλΌ 'μ' 'μ€' 'ν' λΌλ κΈμλ§ μ
λ ₯ν μ μκ²
λμ± μ격ν νμ
μ§μ λ κ°λ₯
(Literal type)
'TIL > Typescript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[TypeScript + React] μΉ΄μΉ΄μ€ λ§΅ μ΄μ©νκΈ° (0) | 2023.05.20 |
---|---|
[TIL] TypeScript λ‘ λ€ν¬λͺ¨λ ꡬννκΈ° π / μ΄λ―Έμ§ μ½μ π (1) | 2023.05.20 |
[TIL] Class + TS (1) | 2023.05.20 |
[TIL] TypeScript νμ νμ νκΈ° <Narrowing> (1) | 2023.05.20 |
Typescript μμ μ ν¨κ» μ΅μν΄μ§κΈ° : part 1 (1) | 2023.05.19 |