問題:
我在第一個檔案中定義了 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