Everyday Types π
μ΄μ κΈ°λ³Έμ μΈ νμ μ€ν¬λ¦½νΈμ νμ λ€μ λν΄ μμ보μ. λλΆλΆ κΈ°λ³Έμ μΈ λΆλΆμ΄λΌ ν¬κ² μ 리ν λΆλΆμ μμλ€.
Primitive
μλ°μ€ν¬λ¦½νΈμ κΈ°λ³Έ νμ
λ€μΈ string, number, boolean
μ΄ λμΌνκ² νμ
μ€ν¬λ¦½νΈμμ μ¬μ©λλ€.
Arrays
λ°°μ΄μ λκ°μ§λ‘ ννν μ μλλ° [1,2,3]
κ³Ό κ°μ number λ°°μ΄μ κ²½μ° number[]
μ Array<number>
λκ°μ§λ‘ λνλΌ μ μλ€.
any
anyλ νμ μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νλ©΄μ κ°μ₯ μ°μ§ λ§μμΌνλ νμ μΌλ‘ μ λͺ νλ°, κ·Έ μ΄μ λ anyλ λͺ¨λ νμ μ κ°μΈλ κ°μ₯ ν° μ§ν©μ ν΄λΉλκΈ° λλ¬Έμ μ΄λ€ νμ μ λ£μ΄λ νμ 체ν¬λ₯Ό ν΅κ³Όν μ μλ€. κ·Έλ¬λ―λ‘ anyλ₯Ό μ§μνμ.
Type annotation
νμ μ€ν¬λ¦½νΈλ λλν΄μ μ°λ¦¬κ° ν λΉν λ³μμ κ°μ λ°λΌ νμ μ λ°λΌ νμ μ μΆλ‘ ν μ μλλ°, λλΆμ primitive νμ μ κ°λ€μ κ΅³μ΄ νμ μ μ νμ§ μμλ μ μ νκ² λΆμ¬ν μ μλ€.
/ No type annotation needed -- 'myName' inferred as type 'string'
let myName = "Alice";
Functions
μλ°μ€ν¬λ¦½νΈμ ν¨μλ νμ μ€ν¬λ¦½νΈμμ νμν νμ μ 보λ λκ°μ§, μΈμμ λ°νκ°μ΄λ€.
μΈμμ νμ
μ μ λ¬νμ§ μκ³ noImplicitAny
μ΅μ
μ΄ μΌμ Έμμ κ²½μ°μ νμ
μλ¬κ° λ¨κ² λλ ν¨μμ μΈμμ νμ
μ μ ν΄μ£Όμ. νμ
μ κ° μΈμ λ€μ μ ν΄μ£Όλ©΄ λλ€.
// Parameter type annotation
function greet(name: string) {
console.log("Hello, " + name.toUpperCase() + "!!")
}
λ°νκ°μ νΉλ³ν μΈμλ₯Ό κ°μΈλ ()
λ€μμ νμ
μ λ£μ΄μ£Όμ. λ°νκ°μ΄ μλ€λ©΄ μλμΌλ‘ void
νμ
μΌλ‘ μΆλ‘ λλ€.
function getFavoriteNumber(): number {
return 26
}
Anonymous functionμ κ²½μ°λ νΉμ΄νκ² μΈμμ νμ μ μ λ¬νμ§ μμλ νμ μ€ν¬λ¦½νΈκ° μλμΌλ‘ νμ μ μΆλ‘ ν΄μ€λ€. μ΄λ¬ν κ² κ°λ₯ν μ΄μ λ contextual typingμ μ΄μ©νκΈ° λλ¬ΈμΌλ‘, μ½λ°±ν¨μλ‘ μ΄λ€ κ°μ΄ μ λ¬ λ μ§ μΆ©λΆν μΆλ‘ ν μ μκΈ° λλ¬Έμ΄λ€.
const names = ["Alice", "Bob", "Eve"]
// Contextual typing for function - parameter s inferred to have type string
names.forEach(function (s) {
console.log(s.toUpperCase())
})
// Contextual typing also applies to arrow functions
names.forEach(s => {
console.log(s.toUpperCase())
})
Object
μλ°μ€ν¬λ¦½νΈμμ primitive νμ μ μ μΈνλ©΄ λͺ¨λ κ°μ²΄λΌκ³ ν μ μλ€.
// The parameter's type annotation is an object type
function printCoord(pt: { x: number; y: number }) {
console.log("The coordinate's x value is " + pt.x)
console.log("The coordinate's y value is " + pt.y)
}
printCoord({ x: 3, y: 7 })
νμ
μ€ν¬λ¦½νΈμμμ ?
λ μ΅μ
λ μμ±μΌλ‘ μμ κ²½μ°μ runtimeμλ¬κ° λλ κ²μ΄ μλλΌ undefinedμΌλ‘ λ°νλ μ μκ² νμ
μ νμ©νλ€.
function printName(obj: { first: string; last?: string }) {
// ...
}
// Both OK
printName({ first: "Bob" })
printName({ first: "Alice", last: "Alisson" })
Union Type
μ΄μ νμ μ€ν¬λ¦½νΈλ§μ νμ μ μκ°νλ € νλ€. Union typeμ λκ°μ§ νμ μ ν©μ§ν©μΌλ‘ λ³Ό μ μλ€.
μμ μ½λκ° μλ¬κ° λ μ΄μ λ toUppserCaseλ stringλ§μ΄ κ°μ§λ λ©μλμΈλ° number|stringμ κ°μ§κ³ μμ§ μκΈ° λλ¬Έμ΄λ€. μ΄λ¬ν νμ μλ¬λ₯Ό ν΄κ²°νκΈ° μν΄μλ μΈμμ λν νμ μ μ’νμ€μΌλ‘μ¨ ν΄κ²°ν μ μλ€.
function printId(id: number | string) {
if (typeof id === "string") {
// In this branch, id is of type 'string'
console.log(id.toUpperCase())
} else {
// Here, id is of type 'number'
console.log(id)
}
}
Type Alias
Type Aliasλ μ°λ¦¬κ° λ³μμ²λΌ νμ μ μνλ λλ‘ μ΄λ¦μ μ νκ³ μ μνλ λ°©λ²μ΄λ€.
type Point = {
x: number
y: number
}
// Exactly the same as the earlier example
function printCoord(pt: Point) {
console.log("The coordinate's x value is " + pt.x)
console.log("The coordinate's y value is " + pt.y)
}
printCoord({ x: 100, y: 100 })
Interface
Interfaceλ Object νμ μ μ°λ¦¬κ° μνλλλ‘ μ μνκΈ° μν λλ€λ₯Έ λ°©λ²μ΄λ€.
μμ£Ό νΌμ©ν΄μ μ¬μ©λλ λκ°μ§ Type aliasμ Interfaceμ λν΄ μ 리ν΄λ³΄λ©΄ λ€μκ³Ό κ°μ μ°¨μ΄μ μ κ°μ§λ€.
- νμ μ μλ‘μ΄ μμ±μ νμ₯ν λ intersectionμ μ΄μ©ν΄μΌνκ³ interfaceλ extendsλ₯Ό μ΄μ©νλ€.
- νμ μ μ€λ³΅μ΄ λΆκ°λ₯νμ§λ§ interfaceλ μ€λ³΅μ μΈμ΄ κ°λ₯νλ€.
κ°κ°μ λͺ©μ μ μν λ°©λ²λ€μ κ°μ§κΈ° λλ¬Έμ μκ°λ³΄λ€ ν° μ°¨μ΄κ° μλ€κ³ λκ»΄μ‘λ€.
Type Assertion
Object.keys() λ¬Έμ΄λ try/catchλ¬ΈμΌλ‘ λ°μ errorλ₯Ό λ€λ£¨κ±°λ ν λ μ°λ¦¬λ unknownνμ μ λ§μ£Όνλ€. μ΄λ΄ λ νμν νμ μΌλ‘ μ’νμ£Όμ΄μΌν κ²½μ°κ° νμ€μ μΌλ‘ νμνλ€. μ΄λ΄ λ μ¬μ©ν μ μλ λ°©λ²μ΄ Type Assertionμ΄λ€.
Type assertionμ΄ λ¬΄μμ΄ μ΄μ λ λ°νμμ μ°λ¦¬κ° μμΈ‘ν νμ κ³Ό λ€λ₯Έ κ°μ΄ μ€μ λ‘ λ€μ΄μ¬μ§ λͺ¨λ₯Έλ€λ μ λλ¬Έμ΄λ€. κΌ νμν λλ§ μ¬μ©νμ.
const myCanvas = document.getElementById("main_canvas") as HTMLCanvasElement
Literal Type
κ°μ μ΄μ©ν΄μ νμ μ μ νλ λ°©λ²μΌλ‘ νμ μ΄ νλμ κ°μΌλ‘ κ³ μ λκΈ° λλ¬Έμ μ£Όλ‘ Union typeμΌλ‘ μ¬λ¬κ°μ§ κ°μ μ΄μ©ν΄ μ μνλ€.
function printText(s: string, alignment: "left" | "right" | "center") {
// ...
}
printText("Hello, world", "left")
κ°μ²΄λ₯Ό μ΄μ©ν λλ κ·Έ κ°μ΄ κ°μ§λ νμ μΌλ‘ μμ±μ νμ μ μ μνμ§ κ°μΌλ‘ μ μνμ§ μλλ€.
μ μ½λκ° μλ¬κ° λ μ΄μ λ methodμ νμ
μ΄ "GET"|"POST"
κ°μ union νμ
μΌλ‘ μ μλμ΄μλλ° reqμ methodλ "GET"
κ°μΌλ‘ νμ
μ΄ μΆλ‘ λ κ²μ΄ μλλΌ stringμΌλ‘ μΆλ‘ λμκΈ° λλ¬Έμ΄λ€.
Nullκ³Ό Undefined
- strictNullChecks: nullμ λ°λμ κ±°λ₯Ό μ μκ² νλ μ΅μ μ΄λ€.
- Non-null Assertion Operator(!): nullκ³Ό undefinedμ΄ μλλΌ λ¨μΈνλ operatorλ‘, λ¨μΈμ΄κΈ° λλ¬Έμ μ§μνμ.