09-TypeScirpt-模块系统-命名空间

2020-10-05  本文已影响0人  低头看云

模块系统

命名空间

  namespace Validation {
    const lettersRegexp = /^[A-Za-z]+$/
    export const LettersValidator = (value) => {
      return lettersRegexp.test(value)
    }
  }

  // 可以通过 reference 来引入其他文件的命名空间

  //   /// <reference path="./56/test.ts" />
  console.log(Validation.LettersValidator('abc'))
  console.log(Validation.LettersValidator(123))

命名空间合并

  interface TestInterface {
    name: string
  }

  interface TestInterface {
    age: number
  }

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

  // 注意点: 如果同名接口中的属性名相同, 那么属性类型必须一致
  // subsequent property declarations must have the same type.  Property 'name' must be of type 'string', but here has type 'boolean'.
  // interface TestInterface {
  //   name: boolean
  // }
  interface TestInterface1 {
    getValue(value: number): number
  }
  interface TestInterface1 {
    getValue(value: string): number
  }

  let obj: TestInterface1 = {
    getValue(value: any): number {
      if (typeof value === 'string') {
        return value.length
      } else {
        return value.toFixed()
      }
    },
  }
  namespace Test {
    export let name: string = 'css'
  }

  namespace Test {
    export let age: number = 12
  }

  console.log(Test.name)
  console.log(Test.age)
  namespace Test1 {
    export let name: string = 'js'
    export let age: number = 112
  }

  // 报错
  // namespace Test1 {
  //   export let name: string = 'js'
  //   export let age: number = 112
  // }

  namespace Test2 {
    let name: string = 'java'
  }
  namespace Test2 {
    export let say = () => {
      console.log(`name is ${name}`)
    }
  }

  Test2.say() // name is

命名空间和类合并

  class Person1 {
    say(): void {
      console.log('32', 32)
    }
  }
  namespace Person1 {
    export let eat = () => {
      console.log('1', 1)
    }
  }

  console.dir(Person1)
  // eat 作为一个静态方法合并到类中
  Person1.eat()
  let p = new Person1()
  p.say()

命名空间和函数合并

  function getCounter() {
    getCounter.count++
    console.log(getCounter.count)
  }

  namespace getCounter {
    export let count: number = 1
  }
  getCounter() // 2

命名空间和枚举合并

  enum Gender {
    Male,
    Female,
  }
  namespace Gender {
    export const Yao: number = 66
  }
  console.log(Gender)
上一篇下一篇

猜你喜欢

热点阅读