小编Ric*_*ick的帖子

使用 imagemagick 中的颜色列表重新映射/分离图像颜色

假设我有这个图像:

橙子

我想将颜色数量减少到 3 种,如下所示:

在此输入图像描述

为此,我应用了以下命令:

convert orange.jpg -remap palette.png orange_output.png

其中palette.png 看起来像这样: 在此输入图像描述

有没有办法在不使用调色板图像的情况下执行此转换?理想情况下,我想提供一个颜色列表并让它以这种方式转换图像。

image rmagick imagemagick dragonfly-gem

5
推荐指数
1
解决办法
3135
查看次数

用数字枚举创建Typescript`Record <>`类型

在Typescript中,可以使用字符串枚举创建记录类型:

enum AxisLabel { X = "X", Y = "Y" }
export const labelLookup: Record<AxisLabel, string> = {
  [AxisLabel.X]: "X axis",
  [AxisLabel.Y]: "Y Axis"
};
Run Code Online (Sandbox Code Playgroud)

我需要创建一个Record与上述对象类似的对象,但是我不希望使用字符串enum

当我尝试这样的事情:

enum AxisLabel { X, Y }
export const labelLookup: Record<AxisLabel, string> = {
  [AxisLabel.X]: "X axis",
  [AxisLabel.Y]: "Y Axis"
};
Run Code Online (Sandbox Code Playgroud)

Typescript产生以下错误:

Type 'AxisLabel' does not satisfy the constraint 'string'.

可以使用数字和字符串作为成员名称来创建JS对象。

我希望在Typescript中做同样的事情,但不要求助于不安全的强制或强制类型转换。如何在Typescript中创建数字枚举Record <>类型而不使用字符串枚举any或类型转换?

enums typescript

5
推荐指数
2
解决办法
3285
查看次数

设置已发布 npm 项目的“根”

我正在发布一个名为foonpm 注册表的 npm 包。我使用 compile-to-js 语言编写了这个包。为了理智起见,我将编译后的输出放入dist/项目目录的文件夹中。我package.json将入口点列为dist/entry.js

{
  "name": "foo",
  "main": "dist/entry.js",
}
Run Code Online (Sandbox Code Playgroud)

有时,我想使用包中不属于入口点的文件。例如,有一个非常有用的导出称为whateverinside dist/util.js

import { whatever } from "foo/dist/util";
Run Code Online (Sandbox Code Playgroud)

这有效,但强制我的包的用户输入dist/所有import语句是不方便的。

此外,重新导出所有可能的 util 函数并不是 DRY。我不想从 entrypoint 重新导出

理想情况下,我想dist/使用以下语法导入文件:

import { whatever } from "foo/util"
Run Code Online (Sandbox Code Playgroud)

如何配置我package.jsondist/我的项目文件夹中搜索文件?

node.js npm package.json

5
推荐指数
1
解决办法
189
查看次数

打字稿选择<>类型失败:类型'"foo"'的参数不能分配给'Pick <Bar,'foo">'类型的参数

我有一个用例,我认为这对于Typescript的Pick类型是完美的.

这是一个精简的例子:

interface CreditCard {
  name: string;
  year: number;
  expired: boolean;
}

function setValue(key: keyof CreditCard, value: Pick<CreditCard, typeof key>) {
  // do stuff...
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试调用此函数时:

setValue("name", "rick");
Run Code Online (Sandbox Code Playgroud)

Typescript(2.3.4)给出以下错误:

error TS2345: Argument of type '"rick"' is not assignable to parameter of type 'Pick<CreditCard, "name" | "year" | "expired">'.
Run Code Online (Sandbox Code Playgroud)

另外,我没有CreditCard可用作为参数传入的实例,因此CreditCard在我的用例中不可能更改函数以作为第三个参数.

typescript typescript2.0

4
推荐指数
1
解决办法
1079
查看次数

Typescript不会在构造函数之外捕获`state`类型的错误?

在此输入图像描述

在上图中,我state错误地设置了默认值(this_is_not_ok不是State界面的一部分).不过,打字稿似乎并不介意.解决此问题的一种方法是显式添加类型注释.

我还可以使用以下方法解决问题constructor():

constructor(){ super(); this.state = {spelling_error: "wrong"}; }

为什么类型推断在第一个例子中不起作用?

typescript typescript2.3

3
推荐指数
1
解决办法
379
查看次数

在rails控制台中禁用数据库写入(仅适用于当前会话)?

在调试生产数据时,我有时会使用Rails控制台来检查和查询数据.

我更喜欢Rails(ActiveRecord)控制台到原始SQL客户端.

有没有办法告诉Rails在我的控制台会话期间不写入数据库以避免意外修改生产数据?

activerecord ruby-on-rails

2
推荐指数
1
解决办法
145
查看次数

如何在 Typescript 中声明 NAMED 函数的接口?

我可以定义一个函数的接口:

interface Handler {
  (state: IState, action: IAction): IState;
}
Run Code Online (Sandbox Code Playgroud)

然后我可以声明一个满足接口的函数:

let selectRegimen: Handler = function(state, action) {
  return state;
};
Run Code Online (Sandbox Code Playgroud)

但是命名(例如,而不是匿名)函数呢?显然,我可以做这样的事情:

let selectRegimen: Handler = function selectRegiment(state, action) {
  return state;
};
Run Code Online (Sandbox Code Playgroud)

...但是这种语法感觉有些奇怪。有更好的方法来处理这个问题吗?

typescript

1
推荐指数
2
解决办法
3570
查看次数

Google Cloud Speech-to-Text 返回 OGG OPUS Base64 音频的空转录

我正在尝试使用 Node.js 中的 Google Cloud Speech-to-Text API 转录 OGG OPUS Base64 编码的音频字符串。音频的采样率为 48000 赫兹。当我运行代码时,API 返回一个空转录。这只是有时发生。其他时候,它可以很好地转录音频。稍后再回到项目,发现错误是随机返回的。当我将 Base64 转换为缓冲区并保存文件时,音频在 VLC 播放器中播放正常,并且 ffprobe 显示结果文件的正确信息。

我已经尝试过检查音频质量、编码、采样率等,但这些解决方案都没有帮助。这是我的代码:

import { SpeechClient } from "@google-cloud/speech";

// `base64Audio` looks like this:
//   "data:audio/ogg; codecs=opus;base64,T2dnUwACAAAAAAAA..."
export async function transcribeB64(base64Audio: string): Promise<string> {
  const client = new SpeechClient();
  return new Promise(async (resolve) => {
    const content = base64Audio.split(",")[1];
    const x = await client.recognize({
      config: {
        encoding: "OGG_OPUS",
        sampleRateHertz: 48000,
        languageCode: "en-US",
      },
      audio: {
        content,
      },
    });
    resolve(JSON.stringify(x, null, 2)); …
Run Code Online (Sandbox Code Playgroud)

ogg webm opus google-cloud-speech

1
推荐指数
1
解决办法
531
查看次数