TypeScript-声明合并
  TEZNKK3IfmPf 2023年11月13日 41 0

 

  • 在 ts 当中接口和命名空间是可以重名的, ts 会将多个同名的合并为一个
interface TestInterface {
name: string;
}

interface TestInterface {
age: number;
}

class Person implements TestInterface {
name: string;
age: number;
}

let person = new Person();
person.name = "BNTang";
person.age = 18;
console.log(person);
  • 同名接口如果属性名相同, 那么属性类型必须一致

TypeScript-声明合并

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 = 'BNTang';
}
namespace Validation {
export let age: number = 18;
}
console.log(Validation.name);
console.log(Validation.age);
  • 同名的命名空间中不能出现同名的变量, 方法等

TypeScript-声明合并

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

TypeScript-声明合并

 

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

 

命名空间和类合并

 

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

 

TypeScript-声明合并

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);
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2023年11月14日   34   0   0 typescript
  TEZNKK3IfmPf   2023年11月14日   24   0   0 typescript
  TEZNKK3IfmPf   2023年11月14日   30   0   0 typescript
  TEZNKK3IfmPf   2024年04月19日   36   0   0 typescript数组编译器
  TEZNKK3IfmPf   2023年11月14日   64   0   0 命名变量
  TEZNKK3IfmPf   2023年11月14日   62   0   0 命名变量
  TEZNKK3IfmPf   2023年11月14日   25   0   0 typescript装饰器
  TEZNKK3IfmPf   2023年11月14日   32   0   0 typescript
TEZNKK3IfmPf