[denoland/deno]类似 Map 的接口 Deno.env

2024-07-17 289 views
8

正如#4933中所述

回答

4

我想知道我们是否可以将其称为entries而不是getAll,同时仍返回一个对象。这仍然不是一个迭代器吗?

1

entry() 返回迭代器对象(具有 next() 方法的对象);普通对象没有迭代器实现

编辑:哎呀,我错误地编辑了@ry 的评论

1

getAll()听起来很奇怪。

其他一些可能性如下:

  • forEach方法使其与 Map 保持一致。
  • entries方法返回一个Array<[string, string]>- 这是一个可迭代对象
  • toObject()执行现在正在做的事情的方法getAll

这些都不是特别好...

5

最好的办法是entries()- 但要把它变成对象,还需要把它包装起来Object.fromEntries()

const env = Object.fromEntries(Deno.env.entries());

vs 

const env = Deno.env.getAll();

仅供参考;在 Rust 中:

let env = env::vars(); (returns interator)

let envVar = env::var("my_var");

env::set_var("my_var", "my_value");

env::remove_var("my_car");
2

我同意条目也是理想的。如果我们toObject()现在就这样做,并为添加 TODO会怎么样entries()

0

entries()实施基本上不会是这样的吗Object.entries(Deno.env.toObject())

1

经过进一步讨论,我们决定使用get()/ set()/ toObject()。@SyrupThinker 你能更新 PR 吗?

6

Deno.env与简单的对象相比,类似 Map 的接口有什么好处?

console.log(Deno.env.SOMETHING);
Deno.env.SOMETHING_ELSE = "BLAH";
1

@jakajancar 我们希望让它看起来不像是在更新某个对象 - 而是调用具有副作用的函数。特别是,在 Windows 中,环境变量不区分大小写。

2

啊,Windows 的情况就足够了。如果属性以意想不到的方式发生变化,那确实看起来很奇怪。

感谢您的解释!