我刚刚做了一个复杂的函数,它带有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上却不是:
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 ....