在Typescript中的对象中具有未定义键与未定义键的用例是什么?

罗宾

我正在使用TypeScript和如下正则表达式解析文件名:

import { Filename } from '../models/filename';

const FILENAME_REGEX = /^(?<slug>.*?)(\.(?<language>[a-z]{2}))?(\.|\-(?<region>[A-Z]{2})\.)(?<extension>[a-z]*)$/i;

export const parseFilename = (filename: string): Filename => {
  const result = FILENAME_REGEX.exec(filename);
  if (result?.groups && result.groups['slug'] && result.groups['extension']) {
    return {
      slug: result.groups['slug'],
      language: result.groups['language'],
      region: result.groups['region'],
      extension: result.groups['extension']
    };
  }

  throw new Error("Filename doesn't match pattern");
};

文件名模型如下所示:

export interface Filename {
  slug: string;
  language?: string;
  region?: string;
  extension: string;
}

我的问题是,如果该region组未为文件名定义page.en.md,我将得到一个返回的对象,如...

{
  slug: "page",
  language: "en",
  region: undefined,
  extension: "md"
}

..有没有一种干净的方法,如果没有,那么就不会得到像这样的对象?:

{
  slug: "page",
  language: "en",
  extension: "md"
}

有未定义键和未定义键的理由或用例是什么?

卡兹

我不确定您认为“干净”的是什么。如果您想使用函数式编程,并且不介意进行一些类型声明,则可以这样进行:

return (['slug', 'language', 'region', 'extension'] as const).
  filter(k => typeof result.groups?.[k] !== "undefined").reduce(
    (f, k) => (f[k] = result.groups?.[k]! , f),
    {} as Filename);

具有以下输出:

console.log(parseFilename("foo.html")) 
// {slug: "foo", extension: "html"}
console.log(parseFilename("bar.en.html")) 
// {slug: "bar", language: "en", extension: "html"}
console.log(parseFilename("baz.en-us.html")) 
// {slug: "baz", language: "en", region: "us", extension: "html"}

贸易if/elsefilter可能不是一个巨大的胜利,但也许它满足您的需求?


但是我个人只是将undefined属性值保留在那里,除非您知道事实会在某个地方引起麻烦。缺少的属性和现在-丁之间的区别undefined属性是可观察到的(例如,prop in objfalse对前一种情况,并true为后者的情况下),但在许多方面,他们是相同的(例如,obj[prop]计算结果为undefined)。TypeScript并不能真正一贯地区分它们,因此即使要表示语言的差异也很费力。因此,建议您in在检查可选属性时注意不要使用等。


好吧,希望能有所帮助;祝好运!

操场上的代码链接

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

“未定义”变量用作具有“未定义”属性名称的对象的键

来自分类Dev

检查对象中未定义的键 - JS

来自分类Dev

为什么在代码中未定义“键”,但在控制台上却定义了“键”?

来自分类Dev

如何避免对象键中没有值的未定义?

来自分类Dev

如果未定义键,则将变量名用作javascript对象中的键

来自分类Dev

键显示未定义

来自分类Dev

EntityFramework中IdentyUsers的集合-未定义键

来自分类Dev

EntityFramework中IdentyUsers的集合-未定义键

来自分类Dev

处理核心数据中的未定义键

来自分类Dev

字典中的 Python 键未定义错误(NameError)

来自分类Dev

为什么变量在方法中未定义但在Typescript的构造函数中未定义

来自分类Dev

迭代全局对象的键尝试在异步回调中访问未定义的变量

来自分类Dev

在Javascript中,为什么未定义对象的子键返回错误而不是未定义?

来自分类Dev

我的 VBA 代码中的“标签未定义”是什么?

来自分类Dev

输出中的“未定义”是什么意思?

来自分类Dev

如果对象未定义,如何检查特定键是否未定义?

来自分类Dev

如果对象未定义,如何检查特定键是否未定义?

来自分类Dev

TypeORM为什么我的关系列未定义?外键未定义

来自分类Dev

成员在TypeScript中未定义

来自分类Dev

如果键的值未定义,如何不在对象文字表示法中设置键

来自分类Dev

为什么在此环境中未定义对象?

来自分类Dev

url.parse()返回未定义的对象键

来自分类Dev

将数组映射到对象,键未定义

来自分类Dev

通过动态键访问对象未定义错误

来自分类Dev

JavaScript中未定义的对象引用

来自分类Dev

在AngularJS中对象属性未定义

来自分类Dev

AngularJS“ this”在普通对象中未定义

来自分类Dev

流星/ JavaScript中未定义的对象

来自分类Dev

数组中的图像对象未定义

Related 相关文章

  1. 1

    “未定义”变量用作具有“未定义”属性名称的对象的键

  2. 2

    检查对象中未定义的键 - JS

  3. 3

    为什么在代码中未定义“键”,但在控制台上却定义了“键”?

  4. 4

    如何避免对象键中没有值的未定义?

  5. 5

    如果未定义键,则将变量名用作javascript对象中的键

  6. 6

    键显示未定义

  7. 7

    EntityFramework中IdentyUsers的集合-未定义键

  8. 8

    EntityFramework中IdentyUsers的集合-未定义键

  9. 9

    处理核心数据中的未定义键

  10. 10

    字典中的 Python 键未定义错误(NameError)

  11. 11

    为什么变量在方法中未定义但在Typescript的构造函数中未定义

  12. 12

    迭代全局对象的键尝试在异步回调中访问未定义的变量

  13. 13

    在Javascript中,为什么未定义对象的子键返回错误而不是未定义?

  14. 14

    我的 VBA 代码中的“标签未定义”是什么?

  15. 15

    输出中的“未定义”是什么意思?

  16. 16

    如果对象未定义,如何检查特定键是否未定义?

  17. 17

    如果对象未定义,如何检查特定键是否未定义?

  18. 18

    TypeORM为什么我的关系列未定义?外键未定义

  19. 19

    成员在TypeScript中未定义

  20. 20

    如果键的值未定义,如何不在对象文字表示法中设置键

  21. 21

    为什么在此环境中未定义对象?

  22. 22

    url.parse()返回未定义的对象键

  23. 23

    将数组映射到对象,键未定义

  24. 24

    通过动态键访问对象未定义错误

  25. 25

    JavaScript中未定义的对象引用

  26. 26

    在AngularJS中对象属性未定义

  27. 27

    AngularJS“ this”在普通对象中未定义

  28. 28

    流星/ JavaScript中未定义的对象

  29. 29

    数组中的图像对象未定义

热门标签

归档