相关疑难解决方法(0)

我可以导入*.d.ts而不是需要它吗?

我有一些模块libnode_modules,我想使用它.我写的lib.d.ts是这个.

文件看起来像:

/src/
    main.ts (imports `lib`)
/types/
    lib.d.ts
Run Code Online (Sandbox Code Playgroud)

在文件中main.ts我可以写这段代码:

/// <reference path="../types/lib.d.ts" />
import {some} from 'lib';
Run Code Online (Sandbox Code Playgroud)

它有效.

但是当我尝试使用import for ambient declaration file时:

import '../types/lib';
import {some} from 'lib';
Run Code Online (Sandbox Code Playgroud)

它编译没有错误,但在生成JS我可以找到此文件的require:

require('../types/lib');
const lib_1 = require('lib');
Run Code Online (Sandbox Code Playgroud)

在丢失文件的运行时出错../types/lib- 它只是一个没有结果文件的环境声明文件.

为什么编译器没有删除*.d.ts文件的导入?
我可以以某种方式使用导入,或者我必须使用引用吗?

解:

如果您不想使用reference指令,则可以将所需的*.d.ts添加到tsconfig.json包含的文件中.

我的tsconfig.json是:

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es2015",
        "lib": ["es2016"],
        "noImplicitAny": true,
        "noImplicitReturns": true,
        "noImplicitThis": true,
        "strictNullChecks": true,
        "noFallthroughCasesInSwitch": true,
        "noUnusedLocals": true,
        "noUnusedParameters": true,
        "noEmitOnError": true,
        "newLine": …
Run Code Online (Sandbox Code Playgroud)

typescript typescript-typings

9
推荐指数
1
解决办法
1万
查看次数

在本地引用 TypeScript dom lib 类型

TypeScript 内置 DOM 库中的几种类型需要在本地模块中使用以实现跨平台代码片段,例如:

// foo.ts
export let foo: EventListener = (e) => ...;
Run Code Online (Sandbox Code Playgroud)

这可以通过添加以下内容来实现:

/// <reference lib="dom" />
Run Code Online (Sandbox Code Playgroud)

问题是该项目中的其他模块受到 DOM 相关类型的污染,而它们并非特定于浏览器或 DOM。

// bar.ts
class Animation {
    ...
}
Run Code Online (Sandbox Code Playgroud)

这会导致任何可能与浏览器全局变量同名的变量出现名称冲突错误,例如:

重复标识符“...”.ts(2300)

lib.dom.d.ts: '...' 也在这里声明。

以下标识符的定义与其他文件中的标识符冲突:... ts(6200)

lib.dom.d.ts:此文件中存在冲突。

无法重新声明块作用域变量“...”.ts(2451)

lib.dom.d.ts: '...' 也在这里声明。

如果可能的话,我希望避免粘贴类似EventListenerlib.dom.d.ts 的类型层次结构。

如何在一个本地模块中使用内置库中的类型而不影响其他模块?

typescript typescript-typings typescript-lib-dom

5
推荐指数
1
解决办法
1752
查看次数