在过去的几个小时里,我一直在努力解决这个问题,而我似乎无法在互联网上找到任何可以清楚解释这个,据说是简单概念的东西.
我目前正在研究一个使用Webpack2和TypeScript的ReactJS项目.除了一件事之外,一切都完美无缺 - 我无法找到一种方法将我自己编写的界面移动到单独的文件中,以便它们对整个应用程序可见.
出于原型设计的目的,我最初在使用它们的文件中定义了接口,但最终我开始添加一些在多个类中需要的东西,并且当所有问题都开始时.无论我对我做了什么改变tsconfig.json,无论我把文件放在哪里,我的IDE和Webpack都抱怨无法找到名字(Could not find name 'IMyInterface').
这是我当前的tsconfig.json文件:
{
"compilerOptions": {
"baseUrl": "src",
"outDir": "build/dist",
"module": "commonjs",
"target": "es5",
"lib": [
"es6",
"dom"
],
"typeRoots": [
"./node_modules/@types",
"./typings"
],
"sourceMap": true,
"allowJs": true,
"jsx": "react",
"moduleResolution": "node",
"rootDir": "src",
"forceConsistentCasingInFileNames": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noImplicitAny": false,
"strictNullChecks": true,
"suppressImplicitAnyIndexErrors": true,
"noUnusedLocals": true
},
"exclude": [
"node_modules",
"build",
"scripts",
"acceptance-tests",
"webpack",
"jest",
"src/setupTests.ts"
],
"types": [
"typePatches"
]
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我tsconfig.json位于项目目录的根目录中,所有源都在 …
我有一个node.js应用程序,它将一些配置信息附加到global对象:
global.myConfig = {
a: 1,
b: 2
}
Run Code Online (Sandbox Code Playgroud)
TypeScript编译器不喜欢这个,因为该Global类型没有名为的对象myConfig:
TS2339:"全局"类型中不存在属性"myConfig".
我不想这样做:
global['myConfig'] = { ... }
Run Code Online (Sandbox Code Playgroud)
如何扩展Global类型以包含myConfig或仅告诉TypeScript闭嘴并信任我?我更喜欢第一个.
我不想改变里面的声明node.d.ts.我看到了这个SO帖子并尝试了这个:
declare module NodeJS {
interface Global {
myConfig: any
}
}
Run Code Online (Sandbox Code Playgroud)
作为扩展现有Global界面的一种方式,但它似乎没有任何影响.
我正在尝试将Promise.allSettledAPI 与 TypeScript一起使用。代码在这里:
server.test.ts:
it('should partial success if QPS > 50', async () => {
const requests: any[] = [];
for (let i = 0; i < 51; i++) {
requests.push(rp('http://localhost:3000/place'));
}
await Promise.allSettled(requests);
// ...
});
Run Code Online (Sandbox Code Playgroud)
但是 TSC 抛出一个错误:
'PromiseConstructor'.ts(2339) 类型上不存在属性 'allSettled'
我已经将这些值添加到lib选项中tsconfig.json:
tsconfig.json:
{
"compilerOptions": {
/* Basic Options */
"target": "ES2015" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */,
"module": "commonjs" /* Specify …Run Code Online (Sandbox Code Playgroud) 有没有办法在您的打样文件中创建一个定义全局可访问类型的文件?
我喜欢打字稿但发现当我想要真正的类型安全时,我必须明确地从整个系统中导入类型.这很烦人.
这个可能非常简单,但我想弄清楚它会发疯。
我在外部 index.ts 文件中有一个非常简单的自执行函数,需要在 window 对象上注册一个全局变量。我想像这样分配它:
(() => {
window.myCustomGlobal = new MyCustomGlobal();
})()
Run Code Online (Sandbox Code Playgroud)
我在 index.ts 旁边创建了 index.d.ts:
import { MyCustomGlobal} from './classes';
declare interface Window {
myCustomGlobal: MyCustomGlobal;
}
Run Code Online (Sandbox Code Playgroud)
上面没有错误,一切看起来都很好。应用程序编译正常。
但是,在 IDE 中,我收到一个错误:
ts2339: Property 'myCustomGlobal' does not exist on type 'Window'
我一生都无法弄清楚究竟是什么让 Typescript“弄清楚”要包含什么 .d.ts 文件。在某些库中,将 .d.ts 文件与 .js 文件放在一起会导致它被拾取,并且工作正常。事实上,我使用了与上面完全相同的接口和一个全局第三方库,效果很好;似乎我的 IDE 无法接收它。
我已经尝试添加index.d.ts到tsconfig.jsoninclude以及files没有运气。
有人可以解释一下,就像对孩子一样,是什么导致 TS 拿起声明文件?有时我觉得我明白了,然后在像这样愚蠢的简单例子中,我觉得自己像个白痴。
谢谢