搜索词
规范文件名
建议
我想重用 get-canonical-filename 逻辑:
TypeScript/src/compiler/core.ts
第1906行到第1909行
| | exporttypeGetCanonicalFileName=(fileName: string)=>string; |
| | exportfunctioncreateGetCanonicalFileName(useCaseSensitiveFileNames: boolean): GetCanonicalFileName{ |
| | returnuseCaseSensitiveFileNames ? identity : toFileNameLowerCase; |
| | } |
用例
我想使用 ts.resolveModuleName
和其伴随的 ts.createModuleResolutionCache
来解析 ImportDeclaration
(如评论建议)。createModuleResolutionCache
需要一个参数 getCanonicalFileName
。我认为在这里使用与编译器本身相同的逻辑是最合适的,这就是我上面链接的函数。
我 可以 直接复制粘贴这个函数,但那 感觉 不对,并且如果将来更新了 toFileNameLowerCase
(它也没有暴露),可能会导致未来出现差异。
示例
const cache = ts.createModuleResolutionCache(currentDirectory, ts.createGetCanonicalFileName(true/false));
const resolved = ts.resolveModuleName(name, file, compilerOptions, host, cache);
检查清单
我的建议满足以下准则:
- 这不会对现有的 TypeScript/JavaScript 代码造成破坏性更改
- 这不会改变现有 JavaScript 代码的运行时行为
- 这可以在不根据表达式的类型发出不同的 JS 的情况下实现
- 这不是一个运行时特性(例如库功能、带有 JavaScript 输出的非 ECMAScript 语法等)
- 这个特性将与 TypeScript's Design Goals 的其他部分保持一致。
3条答案
按热度按时间jvlzgdj91#
我们需要让
createModuleResolutionCache
也接受caseSensitive
,而不是暴露createGetCanonicalFileName
。hwazgwia2#
是的,这可能更有意义。我假设我能使用
compilerHost.useCaseSensitiveFileNames
来获取适当的值?zqry0prt3#
我刚刚注意到
CompilerHost
提供了访问getCanonicalFileName
方法的途径:TypeScript/lib/typescript.d.ts
第2926行到第2934行
| | exportinterfaceCompilerHostextends ModuleResolutionHost{ |
| | getSourceFile(fileName: string,languageVersion: ScriptTarget,onError?: (message: string)=>void,shouldCreateNewSourceFile?: boolean): SourceFile|undefined; |
| | getSourceFileByPath?(fileName: string,path: Path,languageVersion: ScriptTarget,onError?: (message: string)=>void,shouldCreateNewSourceFile?: boolean): SourceFile|undefined; |
| | getCancellationToken?(): CancellationToken; |
| | getDefaultLibFileName(options: CompilerOptions): string; |
| | getDefaultLibLocation?(): string; |
| | writeFile: WriteFileCallback; |
| | getCurrentDirectory(): string; |
| | getCanonicalFileName(fileName: string): string; |
针对我的特定用例的解决方法可以是: