【问题标题】:Typescript Promise type to show name of returned variableTypescript Promise 类型以显示返回变量的名称
【发布时间】:2018-01-07 04:05:32
【问题描述】:

我正在 Typescript 中为管理仪表板编写一些函数,这些函数将返回具有特定值(通常是字符串)的承诺。

我正在使用 VS Code,当我在调用它时将鼠标悬停在函数名称上时,它会显示返回值的类型(字符串、数字等)。 我还想显示一个名称和类型,并且想知道最好的方法是什么。

目前,我正在返回一个对象,该对象的属性具有显式名称和旁边的类型。

例子:

通常,你会这样写:

function normalizeCarMake (carMake: string):Promise<string> {}

我是这样写的:

function normalizeCarMake (carMake: string):Promise<{carMake: string}> {}

这样当我将鼠标悬停在 VS Code 中的函数调用上时,它会显示:

(alias) normalizeCarMakePromise(driverCarMake: string): Promise<{
    carMake: string;
}>

有没有更好的方法来实现这个结果?我不想让只返回一个值的所有承诺返回变得复杂。

【问题讨论】:

  • 我不认为string 等同于{carMake: string}。第一个是string,第二个是object,其中包含名称为carMake 的属性,其本身的类型为string
  • 唯一的字符串和包含字符串的对象是有区别的。
  • 我认为在您的情况下,最好的方案是将 string 包装在单独的 class 中并返回它而不是纯字符串。这样你就可以实现你想要的,但这也是最佳编码标准的好习惯
  • 我所说的将string 包裹在class 中的意思基本上是这样做的:export class CarMake { constructor(public carMake: string) {} }

标签: typescript types promise


【解决方案1】:

据我了解,您只想在运行时使用string 而不是包含string 的对象,但您希望在编译时存在carMake 之类的东西。一种想法是使用类型别名:

type CarMake = string;
function normalizeCarMake(carMake: CarMake): Promise<CarMake> { ... }

不幸的是,当您将鼠标悬停在 normalizeCarMake 上时,它只会取消引用该别名并显示给您

function normalizeCarMake(carMake: string): Promise<string> ?

解决这个问题的一种方法是使别名更复杂一点:

type CarMake = string & {__type?: 'CarMake'}; 

仍将接受string 值; CarMake 在运行时只是 string

const toyota: CarMake = 'Toyota';

现在如果你将鼠标悬停在你得到的函数上

function normalizeCarMake(carMake: CarMake): Promise<CarMake> ?

这也许就是你想要的!希望有帮助;祝你好运!

【讨论】:

  • 谢谢你的回答,我可能会这样做。但是,我每次都返回一个对象而不是只返回一个字符串,这是一个问题吗?
  • 返回{carMake: string} 类型的对象不是问题,如果这是您想要做的。正如您所指出的,它增加了一些复杂性......在运行时,当您只关心string 时,您必须包装和解包一个对象。但这并没有什么问题。
  • @jcalz 感谢分享这个技巧。它是记录功能还是您发现它是打字稿的一部分?
  • 我认为它已记录在案 here
猜你喜欢
  • 2021-10-17
  • 1970-01-01
  • 2020-09-19
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多