Typescript 导入关联的已声明模块后,所有文件都可以使用全局声明
我使用的是typescript 2.3.4,我想防止@types/knockout暴露其全局变量“ko”。因此,我在tsconfig.json中放置了类型:[],并且我明确希望导入ko(如second.ts)。 问题是我在second.ts中进行的导入为第一个.ts提供了@types/knockout全局变量(ko,KnockoutObservable…) 第一,ts:Typescript 导入关联的已声明模块后,所有文件都可以使用全局声明,typescript,Typescript,我使用的是typescript 2.3.4,我想防止@types/knockout暴露其全局变量“ko”。因此,我在tsconfig.json中放置了类型:[],并且我明确希望导入ko(如second.ts)。 问题是我在second.ts中进行的导入为第一个.ts提供了@types/knockout全局变量(ko,KnockoutObservable…) 第一,ts: const obs : KnockoutObservable<string> = ko.observable("h
const obs : KnockoutObservable<string> = ko.observable("hello"); // should raise error TS2304: Cannot find name 'ko'. and error TS2304: Cannot find name 'KnockoutObservable'.
console.log(obs());
tsconfig.json:
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"noImplicitAny": true,
"sourceMap": false,
"declaration": false,
"noUnusedLocals": true,
"outDir": "dist",
"types": [
]
},
"exclude": [
"node_modules",
"dist"
]
}
完整的解决方案可在以下位置获得:
我如何防止ko成为一个全局性的模块,并将其作为一个模块(导入…从)?没有简单的方法。正在遵循广泛的模式,允许将它们作为全局或模块使用。这种模式的一个副作用是,一旦编译中包含了敲除类型,变量ko
就会出现在全局范围内
一种解决方法是分别编译second.ts
和first.ts
,每个都有自己的tsconfig.json
,然后将它们与bundler或模块加载器组合。为了防止first.ts
意外导入敲除
,您需要在tsconfig
中有空的类型
和类型根
,并在文件
中明确列出所有键入
另一个选择是为knockout自己打字,只将其声明为一个模块。同样,在tsconfig
中必须有空的types
和typeroot
,以防止typescript访问节点模块中的“错误”打字
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"noImplicitAny": true,
"sourceMap": false,
"declaration": false,
"noUnusedLocals": true,
"outDir": "dist",
"types": [
]
},
"exclude": [
"node_modules",
"dist"
]
}