我需要在 Deno TypeScript 中处理绝对路径变量和相对路径变量。
std
库具有 ParsedPath
类型,但这不够具体。除了在变量名中添加 absolute
/relative
单词之外,还有其他方法可以键入它吗?最好的情况是它应该在 Windows 和 Linux 上都能工作,但如果很难的话 Windows 就足够了。
首先,一些观察:
ParsedPath
接口的属性是可变的,因此无论您从它派生什么类型,都必须强制实例不能被改变(例如,通过使用实用程序Readonly<Type>
)——否则,消费者可能会做出更改它,这将规避您寻求的类型系统歧视。
root
将是相对解析路径的空字符串 ""
— 可用于区分路径是相对路径还是绝对路径。
这是一个例子:
import { parse } from "https://deno.land/[email protected]/path/parse.ts";
import type { ParsedPath } from "https://deno.land/[email protected]/path/_interface.ts";
type AbsoluteParsedPath = Readonly<ParsedPath> & { readonly isAbsolute: true };
type RelativeParsedPath = Readonly<ParsedPath> & { readonly isAbsolute: false };
function parsePath(path: string): AbsoluteParsedPath | RelativeParsedPath {
const parsed = parse(path);
return Object.assign(parsed, { isAbsolute: parsed.root.length > 0 });
}
declare const inputPath: string;
const parsed = parsePath(inputPath);
// ^? const parsed: AbsoluteParsedPath | RelativeParsedPath
if (parsed.isAbsolute) {
parsed
//^? const parsed: AbsoluteParsedPath
} else {
parsed
//^? const parsed: RelativeParsedPath
}