【问题标题】:Why do we use a custom type instead string?为什么我们使用自定义类型而不是字符串?
【发布时间】:2020-05-30 03:01:15
【问题描述】:

我正在读一本关于打字稿的书。在一章中我找到了代码示例:

type OptionsType = {
    db: string;
};

export const connect = ({ db }: OptionsType): void => {
  mongoose.connect(db);
};

而使用是:

const db = "mongodb://";
connect({ db });

为什么我们将db 字符串连接包装到自定义类型OptionsType?为什么不使用字符串db,因为mongoose.connect(db); 接受这个。

【问题讨论】:

  • 很难明确回答为什么某些示例代码会做某事。你想要猜测吗?我的猜测是他们试图向你展示解构是如何工作的。或者他们可能想让OptionsType 拥有更多的属性,而不仅仅是db 字符串。

标签: typescript mongoose


【解决方案1】:

函数connect 由本书作者定义。他决定它应该采用一个参数,该参数是一个具有名为db 的属性的对象。

他实现了该函数,以便从函数参数的名为db 的属性中取出值,并使用它来调用mongoose.connect,这需要它的第一个参数是连接字符串。

作者决定这样定义他的函数并没有什么特别的原因。也许他想说明如何将值作为对象的属性传递给函数?

由于他只传递了一个值,因此真的没有理由将其包裹在一个对象中。

【讨论】:

  • 那么,为什么他通过了connect({ db }); 而不是:connect({ db: db });
  • 还有为什么我们在这里再次将其包装成对象:({ db }: OptionsType): => {} ?
  • @Jony Yes connect({ db }); 只是connect({ db: db }); 的简写符号,我们有({ db }: OptionsType) => {} 将值从db 类型的对象OptionsType 的属性中取出并放入名为 db 的局部变量。我们可以改用(param: OptionsType) => { var db = param.db; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多