TypeScript-声明合并

简介: TypeScript-声明合并

在 ts 当中接口和命名空间是可以重名的, ts 会将多个同名的合并为一个



接口


interface TestInterface {
    name: string;
}
interface TestInterface {
    age: number;
}
class Person implements TestInterface {
    name: string;
    age: number;
}
let person = new Person();
person.name = "yangbuyiya";
person.age = 18;
console.log(person);
  • 同名接口如果属性名相同, 那么属性类型必须一致

interface TestInterface {
    name: string;
}
interface TestInterface {
    name: number;
}


  • 同名接口如果出现同名函数, 那么就会成为一个函数的重载
interface TestInterface {
    getValue(value: number): number;
}
interface TestInterface {
    getValue(value: string): number;
}
let obj: TestInterface = {
    getValue(value: any): number {
        if (typeof value === 'string') {
            return value.length;
        } else {
            return value.toFixed();
        }
    }
}
console.log(obj.getValue("abcdef"));
console.log(obj.getValue(3.14));




命名空间

namespace Validation {
    export let name: string = 'yangbuyiya';
}
namespace Validation {
    export let age: number = 18;
}
console.log(Validation.name);
console.log(Validation.age);


  • 同名的命名空间中不能出现同名的变量, 方法等

namespace Validation {
    export let name: string = 'yangbuyiya';
    export let say = () => "abc";
}
namespace Validation {
    export let name: string = 'zs';
    export let say = () => "abc";
}
  • 同名的命名空间中其它命名空间没有通过 export 导出的内容是获取不到的
namespace Validation {
    let name: string = 'yangbuyiya';
}
namespace Validation {
    export let say = () => {
        console.log(`name = ${name}`);
    };
}
Validation.say();

除了同名的接口和命名空间可以合并以外 命名空间还可以和同名的 类/函数/枚举 合并





命名空间和类合并


类必须定义在命名空间的 前面会将命名空间中导出的方法作为一个 静态方法 合并到类中

class Person {
    say(): void {
        console.log('hello world');
    }
}
namespace Person {
    export const hi = (): void => {
        console.log('hi');
    }
}
console.dir(Person);




命名空间和函数合并


函数必须定义在命名空间的 前面

function getCounter() {
    getCounter.count++;
    console.log(getCounter.count);
}
namespace getCounter {
    export let count: number = 0;
}
getCounter();




命名空间和枚举合并


没有 先后顺序 的要求

enum Gender {
    Male,
    Female
}
namespace Gender {
    export const Yao: number = 666;
}
console.log(Gender);

最后

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关文章
|
12月前
TypeScript-类和泛型和ypeScript-接口合并现象
TypeScript-类和泛型和ypeScript-接口合并现象
56 0
|
5月前
|
JavaScript 前端开发 编译器
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
117 0
|
3月前
|
JavaScript 编译器
TypeScript(十三)声明合并
TypeScript(十三)声明合并
24 0
|
4月前
|
JavaScript 前端开发 编译器
34.【TypeScript 教程】声明合并
34.【TypeScript 教程】声明合并
29 0
|
5月前
|
JavaScript 前端开发 编译器
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)(下)
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
50 0
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)(下)
|
5月前
|
JavaScript
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)(上)
TypeScript【泛型1、泛型2、声明合并、命名空间 、模块1、模块2、声明文件简介】(五)-全面详解(学习总结---从入门到深化)
64 0
|
JavaScript 前端开发
「TypeScript」入门进阶(五)✈️---声明与声明合并
「TypeScript」入门进阶(五)✈️---声明与声明合并
|
JavaScript
TypeScript里的类型合并操作符&
TypeScript里的类型合并操作符&
449 0
TypeScript里的类型合并操作符&
|
JavaScript
TypeScript里的空值合并运算符(双问号)用法
TypeScript里的空值合并运算符(双问号)用法
187 0
TypeScript里的空值合并运算符(双问号)用法
|
JavaScript 前端开发 编译器
TypeScript Declaration Merging(声明合并)
TypeScript中有一些独特的概念,来自需要描述JavaScript对象类型发生了哪些变化。举个例子,最为独特的概念就是"声明合并"。理解了这个概念将会对你在当前JavaScript项目中使用TypeScript开发很有帮助。