vscode和monaco编辑器之间的不同Typescript推理管理

问题描述 投票:0回答:1

我刚刚做了一个复杂的函数,它带有3个参数:名称,类型和方法。此功能将方法存储在商店中。它从第二个参数推断出第三个参数的返回类型。

addMethod.d.ts

interface SimplifiedTypeMap {
  string: string;
  number: number;
  boolean: boolean;
}

type GlobalMethodAdd = <T extends keyof SimplifiedTypeMap>(
  name: string,
  types: T[],
  method: () => SimplifiedTypeMap[T]
) => void;

interface MethodStore {
  [name: string]: {
    types: (keyof SimplifiedTypeMap)[];
    method: () => SimplifiedTypeMap[keyof SimplifiedTypeMap];
  };
}

感谢打字机引擎,从第二个参数(类型)中的项目推断出最后一个参数(方法)的返回类型,并且int强制函数的用户编写具有特定返回类型的方法

addMethod.ts

import { random } from "lodash-es";

export const methodStorage: MethodStore = {};

const addMethod: GlobalMethodAdd = (name, types, method) => {
  methodStorage[name] = { types, method };
};

addMethod("test", ["string", "number"], () =>
  random(1, true) > 0.5 ? "abcd" : 1234
);

[当我在Visual Studio Code或Codesandbox上使用addMethod函数时,第三个参数的返回类型是众所周知的,但在monaco-editor上却不是:

Visual Studio代码enter image description here

codesandbox编辑器enter image description here

(FAILING)摩纳哥编辑enter image description here

Here is my example in codesandbox

================================================ =========================>

编辑

我发现正是使用noLib编译器选项才能实现这一目标。
reactMonaco.languages.typescript.typescriptDefaults.setCompilerOptions({
  target: reactMonaco.languages.typescript.ScriptTarget.ES5,
  noLib: true,
  allowNonTsExtensions: true,
  checkJs: true,
});

是否有一种方法可以避免es5库自动补全,同时保持推理正常工作?

我刚刚做了一个复杂的函数,它带有3个参数:名称,类型和方法。此功能将方法存储在商店中。它从第二个参数推断出第三个参数的返回类型。 addMethod.d ....

typescript visual-studio-code intellisense type-inference monaco-editor
1个回答
0
投票

TL; DR

© www.soinside.com 2019 - 2024. All rights reserved.