01 Typescript問題

  1. 問題:
  2. 沒有 export 該模組 可是在其他檔案可以看到該模組?

問題:

我在第一個檔案中定義了 class Person 可是我沒有 export,為什麼我在第二個檔案的提示中會初心第一個檔案的 Person?

Cannot redeclare block-scoped variable 'counter'.ts(2451)
SingletonPattern.ts(31, 7): 'counter' was also declared here.
Codeium: Explain Problem

const counter: {
    increment: () => number;
    decrement: () => number;
    reset: () => number;
}

沒有 export 該模組 可是在其他檔案可以看到該模組?

例子:

index.ts
我沒在 index.ts 裡面 import Counter

function createCounter() {
  let count = 0;

  return {
    increment: () => ++count,
    decrement: () => --count,
    reset: () => (count = 0),
  };
}

const counter = createCounter();
console.log(counter.increment()); // 1
console.log(counter.increment()); // 2
console.log(counter.increment()); // 3
console.log(counter.decrement()); // 2
console.log(counter.reset()); // 0
console.log(counter.increment()); // 1

SingletonPattern.ts
我沒在 SingletonPattern.ts 裡面 export Counter

// Singleton Pattern 確保一個類別只有一個實例。
// 透過靜態方法來提供唯一的實例訪問點。
// 適合需要全局共享資料或服務的情境,例如配置管理、日誌系統等。
// 這裡,instance 默認為 null,當第一次調用 getInstance() 時,才會創建實例,並且確保該實例在系統的生命周期中唯一。

class Counter {
  private static instance: Counter | null = null;

  private constructor() {}

  public static getInstance(): Counter {
    if (!Counter.instance) {
      Counter.instance = new Counter();
    }

    return Counter.instance;
  }

  #count: number = 0;

  increment() {
    this.#count++;
    return this.#count;
  }

  getCount() {
    return this.#count;
  }
}

const counter = Counter.getInstance();
const counter2 = Counter.getInstance();

console.log(counter.increment());
console.log(counter2.increment());
// console.log(counter === counter2);

解決方法:
tsconfig.json 中找到moduleDetection把他改成force

{
  "compilerOptions": {
    "module": "ESNext",
    "moduleDetection": "force"
  }
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 kimfei2014@gmail.com
github