// Type definitions for [~λΌμ΄λΈλ¬λ¦¬ μ΄λ¦~] [~μ νμ λ²μ μ«μ~]
// Project: [~νλ‘μ νΈ μ΄λ¦~]
// Definitions by: [~λ΄ μ΄λ¦~] <[~λ΄ URL~]>
/*~ λΌμ΄λΈλ¬λ¦¬κ° νΈμΆ κ°λ₯νλ€λ©΄ (μ. myLib(3)μ²λΌ νΈμΆ κ°λ₯νλ€λ©΄)
*~ μ¬κΈ°μ νΈμΆ μκ·Έλμ²λ₯Ό ν¬ν¨νμΈμ.
*~ κ·Έλ μ§ μμΌλ©΄, μ΄ μΉμ
μ μμ νμΈμ.
*/
declare function myLib(a: string): string;
declare function myLib(a: number): number;
/*~ λΌμ΄λΈλ¬λ¦¬μ μ΄λ¦μ΄ μ ν¨ν νμ
μ΄λ¦μΌλ‘ μ¬μ©νκ³ μΆμΌλ©΄,
*~ μ¬κΈ°μ ν μ μμ΅λλ€.
*~
*~ μλ₯Ό λ€μ΄, 'var x: myLib'; μ²λΌ μ¬μ©ν μ μμ΅λλ€.
*~ νμ§λ§ μ΄κ² μ€μ λ‘ μλ―Έ μλμ§ νμΈνμΈμ! κ·Έλ μ§ μλ€λ©΄,
*~ ν΄λΉ μ μΈμ μμ νκ³ μλ λ€μμ€νμ΄μ€ μμ νμ
μ μΆκ°νμΈμ.
*/
interface myLib {
name: string;
length: number;
extras?: string[];
}
/*~ μ μ λ³μμ exportλ νλ‘νΌν°λ₯Ό λΌμ΄λΈλ¬λ¦¬κ° κ°κ³ μλ€λ©΄,
*~ μ΄κ³³μ μμΉμν€μΈμ.
*~ μ¬κΈ°μλ νμ
(μΈν°νμ΄μ€μ νμ
λ³μΉ)μ μμΉμμΌμΌ ν©λλ€.
*/
declare namespace myLib {
//~ 'myLib.timeout = 50;' λΌκ³ μ¬μ©ν μ μμ΅λλ€.
let timeout: number;
//~ 'myLib.version'μ μ κ·Όν μ μμ§λ§, μμ ν μ μμ΅λλ€.
const version: string;
//~ 'let c = new myLib.Cat(42)' λλ μ°Έμ‘° (μ. 'function f(c: myLib.Cat) { ... }) λ₯Ό ν΅ν΄
//~ ν΄λμ€λ₯Ό λ§λ€ μ μμ΅λλ€
class Cat {
constructor(n: number);
//~ 'Cat' μΈμ€ν΄μ€μμ 'c.age'λ₯Ό μ½μ μ μμ΅λλ€
readonly age: number;
//~ 'Cat' μΈμ€ν΄μ€μμ 'c.purr()'λ₯Ό νΈμΆν μ μμ΅λλ€.
purr(): void;
}
//~ λ€μκ³Ό κ°μ΄ λ³μλ₯Ό μ μΈν μ μμ΅λλ€.
//~ 'var s: myLib.CatSettings = { weight: 5, name: "Maru" };'
interface CatSettings {
weight: number;
name: string;
tailLength?: number;
}
//~ 'const v: myLib.VetID = 42;'λΌκ³ μμ±ν μ μμ΅λλ€.
//~ λλ 'const v: myLib.VetID = "bob";'
type VetID = string | number;
//~ 'myLib.checkCat(c)' λ 'myLib.checkCat(c, v);'μ νΈμΆν μ μμ΅λλ€.
function checkCat(c: Cat, s?: VetID);
}