Typescript中外部声明

1,295 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情

外部声明

Typescript中源文件的类型有.ts或者.tsx的文件或者.d.ts的文件。外部声明有类型声明和模块声明。外部类型声明中我们定义的时候需要使用declare关键字。外部类型声明有外部变量声明、外部类声明、外部函数声明以及外部命名空间声明和外部枚举声明。我们需要注意的是,外部变量声明是不允许定义初始值,用来表示一种类型而不是表示一个值。当我们定义外部变量声明时没有使用类型注解的话,变量的类型默认为any类型。外部变量声明类型的定义如下:

declare var x: number;
declare const z: number;

外部函数声明使用关键字declare function定义。外部函数声明定义的需要注意不允许带有函数实现,只能去定义函数类型。

declare function x(t: number, y: string): void;

外部类的声明使用关键字declare class,在定义外部类的声明时需要注意的是,外部声明中的成员不允许带有具体的实现只允许定义类型。定义类的方法或者构造函数时也不允许带有具体的实现,类的属性声明中也不允许定义初始值。外部类的定义方法如下:

declare class Y {
    public x: stirng;
    private z: number;
    t(h: string, u: string): string;
}

外部枚举声明和常规的枚举声明语法是一样的,但是也有不同的地方,比如在外部枚举声明中,枚举成员的值必须是数字字面量,字符串字面量这种的常量枚举表达式。当我们使用declare enum的枚举时,当枚举成员没有写初始值,那么这个枚举成员就会是计算枚举成员而且也不会被赋值一个自增长的初始值。

declare enum Tea {
    X,
    Y
}
delare enum Rea {
    X = 0,
    Y = 1,
}

外部命名空间在定义时,空间的成员默认是导出成员,不需要使用关键字export去导出,如果我们使用关键字export也不会报错。

declare namespace Tea {
    interface X {
        y: string,
        z: number
    }
}

外部模块声明使用的关键字是declare module关键字,后面是一个表示模块名的字符串。我们在定义外部模块声明的时候需要注意的是外部模块声明只能在文件的顶层去定义,需要存在于全局命名空间当中。模块名中也不能使用路径。

declare module 'op' {
    export function addNuber(add: number): number;
}