如何设置绝对路径和相对路径的类型?

问题描述 投票:0回答:1

我需要在 Deno TypeScript 中处理绝对路径变量和相对路径变量。

std
库具有
ParsedPath
类型,但这不够具体。除了在变量名中添加
absolute
/
relative
单词之外,还有其他方法可以键入它吗?最好的情况是它应该在 Windows 和 Linux 上都能工作,但如果很难的话 Windows 就足够了。

typescript types relative-path deno absolute-path
1个回答
0
投票

首先,一些观察:

  • ParsedPath
    接口的属性是可变的,因此无论您从它派生什么类型,都必须强制实例不能被改变(例如,通过使用实用程序
    Readonly<Type>
    )——否则,消费者可能会做出更改它,这将规避您寻求的类型系统歧视。

  • 字符串属性

    root
    将是相对解析路径的空字符串
    ""
    — 可用于区分路径是相对路径还是绝对路径。

这是一个例子:

TS Playground 中的代码

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
}

© www.soinside.com 2019 - 2024. All rights reserved.