TypeScript Property X在窗口上不存在,无法在其他脚本中使用,

xvw2m8pv  于 3个月前  发布在  TypeScript
关注(0)|答案(3)|浏览(40)

TypeScript版本: 3.8.3
我的代码的相关部分

preload.ts

declare global {
    interface Window {
        myFunc(param: string): void;
    }
}

const myFunc = (param: string): void => { ... };

window.myFunc = myFunc;

script.ts

window.myFunc('parameter');

预期行为:

编译无错误并在运行时执行函数。

实际行为:

编译器抛出以下错误:
script.ts error TS2339: Property 'myFunc' does not exist on type 'Window & typeof globalThis'.
preload.ts在没有任何问题的情况下编译。这个错误只在使用window的自定义属性时出现。

v64noz0r

v64noz0r1#

你是如何运行 tsc 的?

flmtquvp

flmtquvp2#

@RyanCavanaugh 我有一段yarn构建脚本:
"build": "tsc -p ./tsconfig.main.json && tsc -p ./tsconfig.renderer.json"
我的主tsconfig文件如下:

{
  "compilerOptions": {
    "target": "ES2019",
    "outDir": "./build",
    "watch": false,
    "noEmit": true,
    "moduleResolution": "node",
    "esModuleInterop": true,
    "noFallthroughCasesInSwitch": true,
    "noImplicitAny": true,
    "noImplicitReturns": true,
    "noUnusedParameters": true,
    "skipLibCheck": true,
    "strict": true,
    "sourceMap": true
  },
  "include": [
    "src"
  ]
}

另外两个文件会扩展这个配置,并设置为输出代码。它们之间的区别仅在于模块格式输出以及排除由另一个配置编译的文件。
也许这个错误是因为preload.ts被第一个部分编译,而script.ts被第二个部分编译。

zd287kbt

zd287kbt3#

我找到了一个不太好的解决方法。首先,我使用"module": "es2015"编译所有文件,然后在第二步中重新编译需要作为CommonJS模块的这些文件。

相关问题