仅适用于本地目录文件的打字稿声明

时间:2019-09-11 17:28:21

标签: typescript declaration

我需要能够用不同类型重新声明变量名。我正在使用TypeScript转换为es3(服务器端jscript ugh),并且在不同的上下文中,此代码将使用具有不同类型但名称相同的不同全局变量运行。

本质上,我需要能够使用类型声明文件使变量在每个目录中作用域。

{
  "compilerOptions": {
    "target": "ES3",
    "module": "system",
    "watch": true,
    "outDir": "js",
    "sourceMap": false,
    "noImplicitAny": false,
    "downlevelIteration": true,
    "strictNullChecks": true,
    "allowJs": true,
    "noEmitOnError": false
  }
}

我的文件结构是这样的:

- tsconfig.json
/ts
  /context
    /contextA
      - contextA.d.ts - contains "declare var context: typeA;"
      - runInContextA.ts - contains reference to a var called 'context'
    /contextB
      - contextB.d.ts - contains "declare var context: typeB;"
      - runInContextB.ts - contains reference to a var called 'context'
    - context.d.ts - typings for the context environment beyond context var
  /otherStuff
    - doesNotUseContextVars.ts - context-free code
/typings
  - tsd.t.ts - global typings for rest of system
/js
  /context
    /contextA
      - runInContextA.js - will be imported into jscript system
    /contextB
      - runIncontextB.js - will be imported into jscript system
  /otherStuff
    - doesNotUseContextVars.js

contextA中,我需要'context'来指代typeA的类型,而对于contextB则相反。 contextAcontextB都有一些共享的全局变量存储在context.d.ts中,doesNotUseContextVars.ts不应使用任何上下文类型。所有ts文件都应使用tsd.t.ts中的声明。

我的系统具有复杂的类继承结构,主要使用ts进行智能感知,并在需要处理系统时避免了很多“陷阱”。

我一直在尝试使用引用路径,因此在我的'runInContextA.ts'文件的顶部,我将引用contextA.d.ts

/// <reference path="./contextA.d.ts" />

同样,在contextA.d.ts中,我还会有另一个参考文献:

/// <reference path="../../context.d.ts" />
declare var context: contextA;

对于上下文B,反之亦然,它指的是它自己的链。

但是,当我转到runInContextB.ts时,上下文var的类型为contextA,并且收到了cannot re-declare blocked-scope variable 'context' ts错误消息。我在上下文B的引用中没有对上下文A的引用,所以我不理解。

我不能真正使用名称空间,否则在为我的环境进行编译时必须将它们删除,而且我也不能使用模块。

我需要为每个文件设置全局类型,但仅针对该目录中的ts文件。我不会将它们捆绑在一起,因此“全局”实际上仅表示该文件的全局。

0 个答案:

没有答案