2023. 3. 9. 00:11γμΈμ΄/Javascript(Node, TS...)
TypeScriptμμ νμ λ€μ νΉμ λ³μκ° κ°μ§ μ μλ κ°μ λ²μλ‘ λ³Ό μ μλ€.
TypeScriptμλ λ€μν νμ λ€μ΄ μ‘΄μ¬νλλ°,
μ΄λ² κΈμμλ κ·Έ μ€ any, unknown, neverμ λν΄ λ€λ€λ³΄λ €κ³ νλ€.
Type: any
any νμ μ νμ κ³μ μ 체 μ§ν©μΌλ‘,
any νμ μ΄ λ°μΈλ©λ λ³μμλ κ·Έ μ΄λ€ κ°λ λ€μ΄κ° μ μλ€.
μ¬κΈ°μ λλλ©΄ μ’κ² μ§λ§, λμ΄ μλλ€.
any νμ μ΄ λ°μΈλ©λ λ³μκ° κ·Έ μ΄νμ λ‘μ§μμ μ¬μ©λ λ, μ»΄νμΌλ¬λ μ΄λ€ νμ κ²μ¬λ μꡬνμ§ μκ³ μ»΄νμΌλ§νλ€.
μ¦ JavaScriptμμμ λ³μλ₯Ό μμ±ν κ²κ³Ό λμΌνκ² μ¬κ²¨μ§κ³ ν΄λΉ λ³μλ₯Ό κ°μ§κ³ μ΄λ€ μΌμ΄λ ν μ μλ€.
λ€λ§, κ·Έ νμμ κ²°κ³Όλ λ°νμμμ μ€μ μλνκΈ° μ κΉμ§λ μ μ μλ€.
λ°λΌμ anyλ₯Ό μ΄μ©νμ¬ λ‘μ§μ μμ±νκ² λλ©΄
κ²°κ³Όλ₯Ό μμνκΈ° νλ μ½λκ° λκ³ μ½λμ μμ μ±μ΄ λ¨μ΄μ§λ©°, μ΄λ‘ μΈν΄ λ²κ·Έκ° μ°½κΆν κ°λ₯μ±μ΄ λμμ§λ€.
λ€λ§ λ‘μ§μ μμ±νλ€λ³΄λ©΄ λ°νμμμ λ³μμ νμ μ΄ κ²°μ λλ κ²½μ°κ° μ’ μ’ μκ³
μ΄λ₯Ό μν΄ anyμ κ°μ΄ μΌλ¨ λͺ¨λ νμ μ λ΄μ κ·Έλ¦μ νμνκΈ° λ§λ ¨μ΄λ€.
μλλ any νμ μ μ¬μ© μμμ΄λ€.
const anyObject: any = {'a':1, 'b':"c"};
// νμ
κ²μ¬λ₯Ό νμ§ μκΈ° λλ¬Έμ ν΄λΉ λ‘μ§μ λ¬Έμ μμ΄ μ»΄νμΌλκ³ , λ°νμμμ undefinedλ₯Ό λ°ν.
console.log(anyObject.c);
// ν΄λΉ μ½λλ numberμ string κ°μ κ³±μ
μ°μ°μ΄κΈ° λλ¬Έμ λ°νμμμ μλ¬λ₯Ό λ°μμν€λ μ½λμ΄μ§λ§,
// anyObjectκ° any νμ
μ΄κΈ° λλ¬Έμ νμ
κ²μ¬λ₯Ό μ§ννμ§ μκ³ μ΄νμ νλ‘νΌν°λ₯Ό λͺ¨λ any νμ
μΌλ‘ λ μ± μ»΄νμΌ μν
console.log(anyObject.a * anyObject.b);
Type: unknown
μ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ΄ν μΆκ°λ νμ μ΄ λ°λ‘ unknownμ΄λ€.
unknown νμ μ any νμ κ³Ό μ μ¬νκ², λͺ¨λ νμ μ λ³μλ€μ λ΄μ μ μλ TypeScript 3.0μμ μλ‘κ² μΆκ°λ νμ μ΄λ€.
unknown νμ κ³Ό any νμ μ λ€λ§ λ³μ ν λΉ μ΄νκ° λ¬λΌμ§λλ°,
λ³μ ν λΉ μ΄ν ν΄λΉ λ³μλ₯Ό κ°μ§κ³ μ΄λ€ λ‘μ§μ ꡬμ±νλλΌλ μ»΄νμΌ νμμμλ νμ κ²μ¬λ₯Ό μꡬνμ§ μλ any νμ κ³Ό λ¬λ¦¬
unknown νμ μ ν λΉ μ΄ν λ³μλ₯Ό μ¬μ©νκΈ° μν΄ λ‘μ§μ μ ν©ν νμ μ ν΄λΉ λ³μκ° κ°μ§κ³ μλμ§ μΆκ°μ μΈ κ²μ¬λ₯Ό μꡬνκ² λλ€.
κ²μ¬ μμ΄ λ‘μ§μ μμ±νκ² λλ©΄, μ»΄νμΌλ¬λ 곧λ°λ‘ μλ¬λ₯Ό λ΄λ±λλ€.
λ°λΌμ any νμ μμ λ¬Έμ κ° λμλ λΆλΆλ€μ unknown νμ μ΄ κ°λ €μ€λ€.
μλλ unknown νμ μ μ¬μ© μμμ΄λ€.
const num: unknown = 10;
// μλ μ½λλ unknown νμ
μ νΉμ± μ μ»΄νμΌ μλ¬λ₯Ό λ°μμν€κ³ νμ
κ²μ¬λ₯Ό μꡬλ°μ
console.log(num+10);
// νμ
κ²μ¬λ₯Ό μννμ¬ num λ³μμ νμ
μ number λ²μκΉμ§ νμ νκΈ° λλ¬Έμ μ μλ
if (typeof num === "number") {
console.log(num+10);
}
any νμ μ μ‘΄μ¬ μ΄μ ?
unknown νμ μ΄ any νμ μ λ¨μ μ μ κ°λ €μ£ΌκΈ° λλ¬Έμ, any νμ μ΄ μ μμ§κΉμ§ TypeScript λͺ μΈμ λ¨μμλμ§ κΆκΈν μ μλ€.
νμ§λ§ any νμ λ λΆλͺ μ°μμκ° μλ€.
λ§μ½ μΈλΆ λΌμ΄λΈλ¬λ¦¬λ‘λΆν° λ°μ΄ν°λ₯Ό κ°μ Έμ¨ λ€ μ΄λ₯Ό νμΌλ‘ μ μ₯ν΄μΌνλ€κ³ νμ λ,
ν΄λΉ λ°μ΄ν°μ νμ μ λν μ 보λ₯Ό μ»μ κΈΈμ΄ μ ν μλ€λ©΄ μ΄λ¨κΉ?
unknown νμ μ μ΄μ©νλ € ν΄λ, λ°μ΄ν°κ° μ΄λ€ μ΄λ€ νΉμ±μ κ°λμ§ μ ν μ μ μκΈ° λλ¬Έμ νμ κ°λλ₯Ό μΆκ°ν μ μλ€.
λ°λΌμ ν΄λΉ κ²½μ°μλ μ΄μ© μ μμ΄ any νμ μ μ΄μ©ν΄μΌ νλ€.
Type: never
μμ any νμ μ΄ νμ κ³μ μ 체 μ§ν©μ΄λΌλ©΄, never νμ μ 곡μ§ν©μ΄λ€.
never νμ μ TypeScriptμ λ°λ₯ νμ μΌλ‘λ λΆλ¦¬λλ°,
곡μ§ν©μ΄λΌλ λΉμ λλ‘ μ΄λ€ νμ λ (μ¬μ§μ΄ undefinedκΉμ§λ!) never νμ μ λ°μΈλ©λ μ μλ€.
μ΄κ² λ¬΄μ¨ μλ―Έμ΄λλ©΄, κ·Έ μ΄λ€ κ°λ λ©λͺ¨λ¦¬μ ν λΉλ μ μκΈ° λλ¬Έμ λ°μ μμ²΄κ° μνλ κ²μΌλ‘ λ³Ό μ μλ€.
never νμ μ κ°λ ν¨μμ μμλ λ€μμ΄ μ‘΄μ¬νλ€.
// neverλ₯Ό λ°ννλ ν¨μ
// λ°λΌμ μ μ΄κΆμ΄ νΈμΆλΆλ‘ μ΄λνμ§ μκ³ ν¨μ λ΄λΆμμ 곧λ°λ‘ νλ‘μΈμ€λ₯Ό μ’
λ£μν΄.
process.exit(0);
// νμ μλ¬λ₯Ό λμ§λ ν¨μμ΄κΈ° λλ¬Έμ λ°νκ°μ΄ x
function alwaysThrowError():never {
throw new Error();
}
// 무ν루νλ‘ μΈν΄ ν¨μκ° μ λ λ°νλμ§ μμ
function infiniteLoop():never {
while (true) {
console.log("-");
}
}
never vs void
μμΉ«νλ©΄ never νμ κ³Ό void νμ μ νΌλν μ μλ€.
νμ§λ§ μ΄ λμ μλ‘ μμ ν λ€λ₯΄λ€.
μΌλ°μ μΌλ‘ voidλ₯Ό λ°ννλ ν¨μλ λ°νκ°μ΄ μλ κ²μΌλ‘ 보μ΄μ§λ§, μ€μ μ»΄νμΌλ¬κ° μ체μ μΌλ‘ return undefinedλ₯Ό νλλ‘ μμ νλ€.
μ¦, void νμ μλ undefined κ°μ΄ ν λΉλ μ μλ κ²μ΄λ€. (μ€μ μ λ°λΌμλ null κ°λ ν λΉμ΄ κ°λ₯νλ€.)
λ°λ©΄ neverλ μμ μΈκΈνλ―μ΄ λ°λ₯νμ μ΄λ©° νμ μ 곡μ§ν©μ΄λ€.
λ°λΌμ undefined μ‘°μ°¨λ ν λΉμ΄ λΆκ°λ₯νκ³ , ν¨μμ κ²½μ°μλ μμ λ°νμ΄ λΆκ°λ₯νλ€.
μ°Έμ‘°
https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#any
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-0.html#new-unknown-top-type
https://ui.toast.com/posts/ko_20220323
'μΈμ΄ > Javascript(Node, TS...)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Interface vs Abstract Class (in Typescript) (0) | 2023.03.19 |
---|---|
Interface in TS (vs Java) (0) | 2023.03.19 |
NodeJS Child_processμ spawn(), exec(), fork() (0) | 2023.03.05 |