如何在Visual Studio Code中复制非类型化函数(TypeScript)的推断类型(当它很长时)

f5emj3cl  于 2023-03-24  发布在  TypeScript
关注(0)|答案(7)|浏览(106)

(See截图)x1c 0d1x
我有一个返回了一个很长的无类型对象的函数,我想复制这个对象的推断类型,因为它太长了,手动操作不方便,然后我想把它做成class/interface,例如:

export class PatientTables {
  emsf: string;
  cadNumber: string;
  // and so on
}

有没有一种方法可以从某个地方复制它,因为Visual Studio Code似乎已经在某个地方组合了它,正如你在图片中看到的(48个),我如何才能让它显示其余部分并复制它?谢谢!

2w3rbyxf

2w3rbyxf1#

右击函数名,选择“重构”,然后选择“推断函数返回类型”。

jjhzyzn0

jjhzyzn02#

一种方法是使用tsc命令行工具。如果您可以隔离文件,使其不存在依赖关系,则可以运行:

tsc filename.ts --declaration --emitDeclarationOnly

生成的filename.d.ts文件将包含生成的类型。

kx1ctssn

kx1ctssn3#

你可以从下面的代码中获取类型:

function createPatientTables() {
    return {
        foo: 'hello world',
        bar: 123
    };
}

type PatientTables = ReturnType<typeof createPatientTables>;
eh57zj3b

eh57zj3b4#

使用this扩展(JSON转TS)。

这并不能直接回答你的问题,但我认为它解决了你的问题。扩展采用JSON并将其转换为TypeScript接口。

utugiqy6

utugiqy65#

对我来说,Visual Code选项不在💡。所以我访问了TypescriptPlayground,并 * 复制-粘贴 * 了我需要类型的Javascript对象。例如:https://www.typescriptlang.org/play?#code/MYewdgzgLgBAHjAvDA3gWAFA2zAZiEALhgHJ8QSAaTHGAIwEMAnYkxpkzAXyA

rhfm7lfc

rhfm7lfc6#

RMC(鼠标右键单击)首先重构命名函数,然后RMC在新函数重构上显示推断返回类型选项。

svujldwt

svujldwt7#

这实际上只是一个“临时”解决方案,但我能够通过使用Omit实用程序获得截断类型的完整形状。
将鼠标悬停在变量data上可以显示文字形状的一部分:

(parameter) data: {
    foo: {
        id: string;
        from: string;
        to: string;
        projectId: string;
        name: string | undefined;
    }[];
    ... 6 more ...;
    bar: Bar[];
}[]

如果我需要得到... 6 more ...的完整形状,我会将已经显示的形状复制到一个“暂存文件”中,并创建一个中间类型:

type Tmp = Omit<typeof data[number], "foo" | "bar">

将鼠标悬停在Tmp上将显示先前被截断的data类型的部分。

相关问题