// 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);
}

results matching ""

    No results matching ""