- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚创建了一个复杂的函数,它有 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];
};
}
感谢 typescript 引擎,最后一个参数(方法)的返回类型是从第二个参数(类型)中的项目推断出来的,并且 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 库自动完成?
最佳答案
在 Monaco Editor 实现正确的解决方案之前,只需使用 monaco.languages.typescript.typescriptDefaults.addExtraLib(YOUR_CUSTOM_LIBRARY,"defaultLib:lib.es6.d.ts")
并且不要理会setCompilerOptions
完全没有。您可以通过组合您想要的部分来创建自己的自定义库 https://github.com/microsoft/TypeScript/tree/master/lib .
我也在使用 Monaco Editor ,但遇到了同样的问题。在仔细查看了 monaco 源代码之后,我想我找到了一个不需要修改 monaco 编辑器源代码的解决方案(解决方法?)。
首先,让我们看一下当前的行为。 Monaco Editor 使用所谓的 LanguageServiceHost实现与 TypeScript 相关的功能,另请参阅 Using the Language Service API :
It [the language host] abstracts all interactions between the language service and the external world. The language service host defers managing, monitoring and maintaining input files to the host.
Monaco 编辑器的 TypeScript 语言宿主是 microsoft/monaco-typescript 的一部分存储库,可以在 tsWorker.ts 中找到.
现在,如果我们看一下源代码,我们会发现只有 two library files是currently supported Monaco Editor :
lib.d.ts
在 compiler option 时使用target设置为 ES5 ,否则使用 lib.es6.d.ts
。更多调试显示,无论我们为 lib 设置什么选项,这两个文件之一用作库。正如你提到的,我们可以使用 noLib选项,但这会导致其他副作用,例如类型推断不再正常工作。
所以现在我的想法是,大多数时候,您不想要图书馆,而是想要一个不同的图书馆。 DOM 特定部分(我想您不需要)在 lib.dom.d.ts 中, 包含在 lib.d.ts 中.通常,至少添加 lib.es5.d.ts 是个好主意。 , 其中包含 JavaScript 基础知识的类型,例如 Object
、Function
或 Number
;或者也许 lib.es2015.d.ts ,其中包含 Symbol
、新的数组方法等。所以问题就变成了:我们如何让 Monaco Editor 使用一个自定义的——可能是空的——库?
在 monaco-typescript
中,库源代码被硬编码在文件 lib.ts 中。 .因此,如果我们使用诸如 webpack 之类的 bundler ,我们可以将该文件替换为我们自己的版本,该版本导出常量 lib_dts
或 lib_es6_dts
以及我们要使用的库。这个选项可能并不总是可行的,而且修改库的源代码无论如何都不是一个好主意。
但如果我们再看一下 tsWorker.ts
和 how it retrieves the content for a given file name ,另一种解决方案(解决方法?)出现了:如果我们 add an extra lib使用特定名称,将使用额外的库而不是内置库。
lib.d.ts
,使用文件名defaultLib:lib.d.ts
lib.es6.d.ts
,使用文件名defaultLib:lib.es6.d.ts
总而言之,这是一个可以在 Monaco Editor playground 上运行的代码示例.请注意,这会将目标设置为 ES5
(如您的示例所示),但我们也可以根本不修改编译器选项,而只使用 lib.es6.d.ts
添加额外的库时。
const code = `
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];
};
}
export const methodStorage: MethodStore = {};
const addMethod: GlobalMethodAdd = (name, types, method) => {
methodStorage[name] = { types, method };
};
// Try hovering over addMethod, type inferrence works correctly
addMethod("test", ["string", "number"], () =>
1 > 0.5 ? "abcd" : 1234
);
// No DOM library loaded, so this gives an error
new HTMLAnchorElement();
`;
async function setup() {
const response = await fetch("https://raw.githubusercontent.com/microsoft/TypeScript/master/lib/lib.es5.d.ts");
const libes5 = await response.text();
monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
allowNonTsExtensions: true,
target: monaco.languages.typescript.ScriptTarget.ES5,
});
// Use "lib.custom.d.ts" for ES5, and "defaultLib:lib.es6.d.ts" for ESNext (the default)
monaco.languages.typescript.typescriptDefaults.addExtraLib(
libes5,
"defaultLib:lib.d.ts"
);
monaco.editor.create(document.getElementById("container"), {
value: code,
language: "typescript"
});
}
setup();
关于typescript - vscode 和 monaco-editor 之间不同的 Typescript 推理管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58834378/
现在,我正在使用 MALLET 包中的 LDA 主题建模工具对我的文档进行一些主题检测。最初一切都很好,我从中得到了 20 个主题。但是,当我尝试使用该模型推断新文档时,结果有点莫名其妙。 例如,我故
我正在使用 Jersey 在 Scala 中开发 REST web 服务JAX-RS 引用实现,我收到一个奇怪的错误。 我正在尝试创建一个 ContentDisposition对象使用 Content
以下两个用于计算斐波那契数列第 n 项的 Haskell 程序具有截然不同的性能特征: fib1 n = case n of 0 -> 1 1 -> 1 x -> (fib
所以在来自 another question 的评论中,我刚刚看到了这个计算字符串中 L 数量的例子: "hello".count('l'==) 而且够疯狂……它有效。 从完全扩展的版本开始,我们有:
我在 android 上运行训练有素的 yolov2 网络时遇到问题。我正在使用这个项目进行测试 https://github.com/szaza/android-yolo-v2 . 提供的网络工作正
我目前在我的 iOS 应用程序中使用 Tensorflow 的 Swift 版本。我的模型工作正常,但我无法将数据复制到第一个张量中,因此我可以使用神经网络来检测东西。 我咨询了the testsui
我有一个 SSD tflite 检测模型,正在台式计算机上使用 Python 运行。就目前而言,我的下面的脚本将单个图像作为推理的输入,并且运行良好: # Load TFLite model
我所拥有的:在 Tensorflow 中经过训练的递归神经网络。 我想要的:一个可以尽可能快地运行这个网络的移动应用程序(只有推理模式,没有训练)。 我相信有多种方法可以实现我的目标,但我希望您能提供
**我得到了一些让我的函数成为纯通用函数的建议,这可行,但我更愿意将函数限制为仅接受 Base 及其子项。 在创建可以接受可变模板类基类型参数的函数时遇到问题,而该函数实际上将使用从 Base 派生的
我想使用 TF 2.0 在我的 GPU 集群上运行分布式预测。我使用 MirroredStrategy 训练了一个用 Keras 制作的 CNN 并保存了它。我可以加载模型并在其上使用 .predic
实现一个 C++ 代码来加载一个已经训练好的模型然后获取它而不是使用 Python 真的值得吗? 我想知道这一点,因为据我所知,用于 python 的 Tensorflow 是幕后的 C++(对于 n
我将在网站上提供 pytorch 模型(resnet18)。 然而,在 cpu(amd3600) 中进行推理需要 70% 的 cpu 资源。 我不认为服务器(heroku)可以处理这个计算。 有什么方
为了充分利用 CPU/GPU,我运行了多个对不同数据集进行 DNN 推理(前馈)的进程。由于进程在前馈期间分配了 CUDA 内存,因此我收到了 CUDA 内存不足错误。为了缓解这种情况,我添加了 to
你知道用 1 个 GPU tensorflow 对 2 个 python 进程进行推理的优雅方法吗? 假设我有 2 个进程,第一个是分类猫/狗,第二个是分类鸟/飞机,每个进程运行不同的 tensorf
我是 Scala 的初学者,不明白这里发生了什么: 给定: val reverse:Option[MyObject] = ... 并且myObject.isNaire返回 bool 值。 如果我这样做
我正在尝试通过用我常用的语言 Clojure 实现算法 W 来自学 Hindley-Milner 类型推理。我遇到了 let 推理的问题,我不确定我是否做错了什么,或者我期望的结果是否需要算法之外的东
我正在尝试通过用我常用的语言 Clojure 实现算法 W 来自学 Hindley-Milner 类型推理。我遇到了 let 推理的问题,我不确定我是否做错了什么,或者我期望的结果是否需要算法之外的东
我做了一个项目,基本上使用带有 tensorflow 的 googles object detection api。 我所做的只是使用预训练模型进行推理:这意味着实时对象检测,其中输入是网络摄像头的视
我有一台带有多个 GPU 的服务器,我想在 Java 应用程序内的模型推理期间充分利用它们。默认情况下,tensorflow 占用所有可用的 GPU,但仅使用第一个。 我可以想到三个选项来解决这个问题
这个预测时间190ms,应该是cpu版本 昨天修改了个OpenCV DNN支持部署YOLOv5,6.1版本的Python代码,今天重新转换为C 代码了!貌似帧率比之前涨了点!说明C的确是比Python
我是一名优秀的程序员,十分优秀!