TypeScript 脚本类型应该与提供的ScriptKind:3和sourceFile.scriptKind: 1相匹配,

oxosxuxt  于 8个月前  发布在  TypeScript
关注(0)|答案(3)|浏览(66)

问题类型:Bug

我在一个闭源项目中始终可以重现这个问题;我还不知道到底是什么原因导致了它,但似乎与复杂的推断Typescript类型有关。在一个大量使用多层推断条件类型的文件中(以下是示例类型列表):

  1. 打开文件,等待“初始化JS/TS语言特性”完成
  2. 在文件中进行任何更改
  3. 观察日志中的扩展主机错误(远程或本地扩展主机输出面板:
[2021-11-24 18:44:38.003] [exthost] [error] Error: <semantic> TypeScript Server Error (4.4.4-sdk)
Debug Failure. False expression: Script kind should match provided ScriptKind:3 and sourceFile.scriptKind: 1, !entry: false
Error: Debug Failure. False expression: Script kind should match provided ScriptKind:3 and sourceFile.scriptKind: 1, !entry: false
    at getDocumentRegistryEntry (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:129272:22)
    at Object.releaseDocumentWithKey (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:129348:25)
    at Object.getOrCreateSourceFileByPath [as getSourceFileByPath] (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:156933:46)
    at tryReuseStructureFromOldProgram (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:112175:28)
    at Object.createProgram (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:111691:29)
    at synchronizeHostData (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:156816:26)
    at Proxy.getProgram (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:156948:13)
    at ConfiguredProject.Project.updateGraphWorker (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:161944:53)
    at ConfiguredProject.Project.updateGraph (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:161873:42)
    at ConfiguredProject.updateGraph (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:162855:63)
    at Object.updateProjectIfDirty (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:163378:45)
    at ConfiguredProject.Project.getLanguageService (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:161491:28)
    at IOSession.Session.getEncodedSemanticClassifications (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:167911:32)
    at Session.handlers.ts.Map.ts.getEntries._a.<computed> (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:167379:61)
    at /workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:169148:88
    at IOSession.Session.executeWithRequestId (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:169139:28)
    at IOSession.Session.executeCommand (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:169148:33)
    at IOSession.Session.onMessage (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:169174:35)
    at IOSession.onMessage (/workspaces/scoop-oak/.yarn/sdks/typescript/lib/tsserver.js:150:32)
    at Interface.<anonymous> (/workspaces/scoop-oak/.yarn/cache/typescript-patch-d95d140154-bd629ad0da.zip/node_modules/typescript/lib/tsserver.js:171787:31)
    at Interface.emit (events.js:315:20)
    at Interface._onLine (readline.js:337:10)
    at Interface._normalWrite (readline.js:482:12)
    at Socket.ondata (readline.js:194:10)
    at Socket.emit (events.js:315:20)
    at addChunk (internal/streams/readable.js:309:12)
    at readableAddChunk (internal/streams/readable.js:284:9)
    at Socket.Readable.push (internal/streams/readable.js:223:10)
    at Pipe.onStreamRead (internal/stream_base_commons.js:188:23)
	at Function.create (/vscode/vscode-server/bin/linux-x64/f4af3cbf5a99787542e2a30fe1fd37cd644cc31f/extensions/typescript-language-features/dist/extension.js:1:460359)
	at dispatchResponse (/vscode/vscode-server/bin/linux-x64/f4af3cbf5a99787542e2a30fe1fd37cd644cc31f/extensions/typescript-language-features/dist/extension.js:1:454195)
	at dispatchMessage (/vscode/vscode-server/bin/linux-x64/f4af3cbf5a99787542e2a30fe1fd37cd644cc31f/extensions/typescript-language-features/dist/extension.js:1:453052)
	at /vscode/vscode-server/bin/linux-x64/f4af3cbf5a99787542e2a30fe1fd37cd644cc31f/extensions/typescript-language-features/dist/extension.js:1:452537
	at l.fire (/vscode/vscode-server/bin/linux-x64/f4af3cbf5a99787542e2a30fe1fd37cd644cc31f/out/vs/server/remoteExtensionHostProcess.js:66:1712)
	at m.onLengthData (/vscode/vscode-server/bin/linux-x64/f4af3cbf5a99787542e2a30fe1fd37cd644cc31f/extensions/typescript-language-features/dist/extension.js:1:463288)
	at Socket.<anonymous> (/vscode/vscode-server/bin/linux-x64/f4af3cbf5a99787542e2a30fe1fd37cd644cc31f/extensions/typescript-language-features/dist/extension.js:1:462935)
	at Socket.emit (events.js:315:20)
	at addChunk (internal/streams/readable.js:309:12)
	at readableAddChunk (internal/streams/readable.js:284:9)
	at Socket.Readable.push (internal/streams/readable.js:223:10)
	at Pipe.onStreamRead (internal/stream_base_commons.js:188:23)

伴随着这个错误日志,语法高亮和下划线编译错误会中断。
似乎与此问题相关的条件类型样本如下:

/**
* For a given config, return the type of its value.
*
* e.g. MetadataFieldValue<typeof slug> === string
*/
export type MetadataFieldValue<Config> = Config extends BaseFieldConfig<string, infer Value>
  ? Value
  : never;

/**
* For a given config, return the type of its name. This will be a string literal type.
* If given a string, just return that.
*
* e.g. MetadataFieldValue<typeof slug> === 'slug';
*/
export type MetadataFieldName<Config> = Config extends BaseFieldConfig<infer Name, any>
  ? Name
  : Config extends string
  ? Config
  : never;

/**
* Given a union of field configs and a specific config name (string literal type),
* return the value type of the config with that name.
*
* e.g. MetadataFieldValueFor<'addendums', typeof slug | typeof addendums> === Addendums
*/
export type MetadataFieldValueFor<Name extends string, Config> = Config extends BaseFieldConfig<
  Name,
  infer Type
>
  ? Type
  : never;

在将这些类型添加到代码库之前,这个文件(总是完全用typescript编写)是可以编辑的,没有任何问题。
请让我知道是否还有更多信息可以提供;在此期间,我会看看是否可以在一个开源代码库中制作一个最小的复现来链接到这个问题!
VS Code版本:Code 1.62.1 (Universal) (f4af3cbf5a99787542e2a30fe1fd37cd644cc31f, 2021-11-05T09:23:14.144Z)
操作系统版本:Darwin x64 20.6.0
受限模式:否
远程操作系统版本:Linux x64 5.10.47-linuxkit
系统信息
| 项目 | 值 |
| ------ | ------ |
| CPUs | Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz (16 x 2400) |
| GPU状态 | 2d_canvas:启用gpu_compositing:启用metal:禁用_offmultiple_raster_threads:启用_onoop_rasterization:启用opengl:启用_onrasterization:启用skia_renderer:禁用_off_okvideo_decode:启用webgl:启用webgl2:启用 |
| 平均负载 | 6, 4, 3 |
| 内存(系统) | 64.00GB (27.29GB free) |
| 进程参数 | --crash-reporter-id 0b636e11-a5a0-44e7-b01c-941a143f4290 |
| 屏幕阅读器 | 否 |
| VM | 0% |
| 项目 | 值 |
| ------ | ------ |
| 远程 | Dev Container: Node.js |
| OS | Linux x64 5.10.47-linuxkit |
| CPUs | Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz (8 x 2400) |
| 内存(系统) | 15.64GB (5.19GB free) |
| VM | 0% |扩展名(15个)
| 作者(省略)| 版本|
| ------|------|------|

x7rlezfr

x7rlezfr1#

我意识到这可能在microsoft/Typescript仓库中更有意义,因为它似乎与tsserver有关(我们也可以使用emacs的typescript lsp来重现)

wgmfuz8q

wgmfuz8q2#

我们确实有一个具体的重现;这里的堆栈表明在类型检查开始之前就出现了问题,所以我认为该文件的内容不太可能是问题所在。

c2e8gylq

c2e8gylq3#

在 TypeScript 4.6.2 中,我还可以可靠地在闭源环境中复现问题。我正在测试一个设置,其中我有指向被符号链接到 tsc 输出的路径的引用,所以不确定符号链接是否可能是问题所在。代码编译和运行正常。

步骤:

  1. find-references 工作正常
  2. 对文件进行更改
  3. 再次使用 find-references,出现以下堆栈错误
  4. 重启 ts-server,一切恢复正常
  5. 对另一个文件进行更改
  6. 仍然出现相同的堆栈错误...
[Trace  - 06:41:52.252] <semantic> Response received: references (34). Request took 594 ms. Success: false . Message: Error processing request. Debug Failure. False expression: Script kind should match provided ScriptKind:3 and sourceFile.scriptKind: 4, !entry: false
Error: Debug Failure. False expression: Script kind should match provided ScriptKind:3 and sourceFile.scriptKind: 4, !entry: false
    at getDocumentRegistryEntry (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:133080:22)
    at Object.releaseDocumentWithKey (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:133173:25)
    at Object.getOrCreateSourceFileByPath [as getSourceFileByPath] (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:161776:46)
    at tryReuseStructureFromOldProgram (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:115156:28)
    at Object.createProgram (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:114668:29)
    at synchronizeHostData (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:161659:26)
    at Object.getProgram (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:161791:13)
    at ConfiguredProject.Project.updateGraphWorker (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:166838:53)
    at ConfiguredProject.Project.updateGraph (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:166767:42)
    at ConfiguredProject.updateGraph (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:167802:63)
    at Object.updateProjectIfDirty (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:168291:45)
    at ConfiguredProject.Project.getLanguageService (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:166381:28)
    at isLocationProjectReferenceRedirect (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:171918:35)
    at callbackProjectAndLocation (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:171935:17)
    at /Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:171874:24
    at forEachProjectInProjects (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:171856:17)
    at combineProjectOutputWorker (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:171871:13)
    at combineProjectOutputForReferences (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:171814:13)
    at IpcIOSession.Session.getReferences (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:173173:34)
    at Session.handlers.ts.Map.ts.getEntries._a.<computed> (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:172163:61)
    at /Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:174044:88
    at IpcIOSession.Session.executeWithRequestId (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:174035:28)
    at IpcIOSession.Session.executeCommand (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:174044:33)
    at IpcIOSession.Session.onMessage (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:174070:35)
    at process.<anonymous> (/Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:176705:31)
    at process.emit (node:events:390:28)
    at emit (node:internal/child_process:917:12)
    at processTicksAndRejections (node:internal/process/task_queues:84:21)

上下文:
我们有一个大型的单仓库,我正在测试一些重构(我们有 128 个带有 tsconfig 的包,合并了许多 tsconfig,但保持了独立的包),以查看是否可以使 find-references 更快。目前大约需要 120 秒,文件更改会导致 ts-server 的 ABRT。现在,在这个设置下,我将包减少到了 16 个 tsconfig,find-references 需要大约 25 秒,但文件更改会导致上述堆栈错误。然而,经过一些挖掘,我有了更多的细节,因为 如果我删除引用另一个启用了 allowJs 的包/tsconfig 的包/tsconfig,那么在文件更改后似乎一切都正常。所以,也许这与那个设置有关?我会尝试深入挖掘并看看是否能找到一个最小的复现案例。

相关问题