小编Sim*_*mon的帖子

在 TypeScript 中使用符号作为对象键类型

我试图用符号定义一个对象作为键类型,因为 MDN 说:

符号值可用作对象属性的标识符 [...]

但是使用它作为键属性的类型:

type obj = {
    [key: symbol | string]: string
}
Run Code Online (Sandbox Code Playgroud)

导致以下错误:

TS1023:索引签名参数类型必须是“字符串”或“数字”。

甚至可以用作索引类型。我正在使用最新的打字稿版本 ( v3.7.2),我发现了相关问题:

我还查看了打字稿符号文档,但它们只显示了如何将其用作值,而不是类型。

例子:

const obj = {} as {
    [key: number | symbol]: string // Won't work
};

const sym = Symbol('My symbol');
obj[sym] = 'Hi';
Run Code Online (Sandbox Code Playgroud)

Microsoft/TypeScript 上的问题

打开功能请求

javascript types symbols typescript

30
推荐指数
2
解决办法
9023
查看次数

在 Preact 和 typescript 中使用 web 组件

我在Preact 中使用自定义元素又名 web 组件。问题是 Typescript 抱怨元素没有被定义在- 在这种情况下是一个元素:JSX.IntrinsicElementscheck-box

<div className={styles.option}>
    <check-box checked={this.prefersDarkTheme} ref={this.svgOptions.darkTheme}/>
    <p>Dark theme</p>
</div>
Run Code Online (Sandbox Code Playgroud)

错误信息(省略路径):

ERROR in MyComponent.tsx
[tsl] ERROR in MyComponent.tsx(50,29)
      TS2339: Property 'check-box' does not exist on type 'JSX.IntrinsicElements'.

Run Code Online (Sandbox Code Playgroud)

我遇到了以下可能的解决方案,但不幸的是无法正常工作:

  1. /sf/answers/4021468951/ - 这是一个与问题无关的答案,但它涵盖了我的问题

我尝试将以下内容添加到我的typings.d.ts文件中:

ERROR in MyComponent.tsx
[tsl] ERROR in MyComponent.tsx(50,29)
      TS2339: Property 'check-box' does not exist on type 'JSX.IntrinsicElements'.

Run Code Online (Sandbox Code Playgroud)

我的 IDE 使导入部分变灰,IntrinsicElements这意味着它没有被使用 (?!) 并且无论如何它都不起作用。我仍然收到相同的错误消息。

  1. /sf/answers/3879734491/ - 同样为了反应,我试图将它“转换”为 preact,我得到了与 1 相同的结果。

我什至在squoosh项目中找到了一个由 google 维护的文件 …

web-component typescript custom-element preact

9
推荐指数
3
解决办法
3551
查看次数

使用伪音符流式传输页面的音频

假设我转到播放音频的页面。是否有任何方法可以显示和捕获来自此木偶页面的音频流?我不想简单地保存它,而是可以访问流,我可以不断地在其他内容中使用该流(例如,使用discord api到服务器)

官方的GitHub回购上已经存在类似的问题:startScreencast功能?

但是我只是想访问页面实例(最好是stream)的音频管道。有什么办法可以做到这一点?

audio audio-streaming node.js puppeteer

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

Java DateTimeFormatter:带GMT日期的DateTimeParseException

我想解析像GMT-日期Wed, 21 Oct 2016 07:28:00 GMTDateTimeFormatterInstant.为了创建模式,我使用了官方文档:DateTimeFormatter

我的代码到目前为止:

String date = "Wed, 21 Oct 2016 07:28:00 GMT";

DateTimeFormatter gmtFormat = DateTimeFormatter.ofPattern("EEE' dd LLL yyyy HH:mm:ss '''");
TemporalAccessor parsed = gmtFormat.parse(date);
Instant a = Instant.from(parsed);

System.out.println(a);
Run Code Online (Sandbox Code Playgroud)

但每次我有这个错误:

Exception in thread "main" java.time.format.DateTimeParseException: Text 'Wed, 21 Oct 2016 07:28:00 GMT' could not be parsed at index 0
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1777)
Run Code Online (Sandbox Code Playgroud)

在索引0Wed,我使用的EEE代表day-of-week定义,也有代表:Tue; Tuesday; T.

我也尝试过低,大写但不成功.怎么了?我忽略了什么吗?

java exception java-8

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

混合curls --data-binary 和编码 url-search 参数的能力

我想使用curl发出发布请求。正文是一个二进制文件,但我也希望curl 对 url 搜索参数进行编码。

curl --request POST \
     --header 'Content-Type:application/octet-stream' \
     --data-binary "@file.txt" \ # The body part, raw, not encoded
     --data-urlencode "name=john" \ # The url-search-param part, encoded
     "https://example.com"
Run Code Online (Sandbox Code Playgroud)

问题是,curl 将其视为--data-urlencode正文的一部分,我想要的是将其name=john附加到 url 部分,如下所示:https://example.com?name=john--data-binary部分作为正文发送POST。(实际上,搜索参数是一个带有“无效”url 字符的字符串,需要对其进行编码)

--data-urlencodeTLDR:我想像发出请求一样使用GET附加参数)并POST --data-binary设置实际POST主体。

快速的谷歌搜索为我提供了要使用的信息--get/-G但这会将请求转换为GET我不想要的请求,因此已经有十几个关于此的问题(但没有一个涵盖我的情况):

curl

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

Java三元运算符不起作用?

假设我们有一个 StringBuilder 和一个 double。现在想追加双精度。如果双精度数可以表示为整数(例如 3.0、5.0 等),我想将其添加为整数,否则添加为双精度数。

实现这一点的第一个方法是:

StringBuilder sb = new StringBuilder();
double d = 3.5;

if (d % 1 == 0) sb.append((int) d);
else sb.append(d);

System.out.println(sb.toString());
Run Code Online (Sandbox Code Playgroud)

这个工作仍然很好,当d3.03 时将追加,如果d3.53.5 将追加。

现在我想用三元运算符快速完成此操作:

StringBuilder sb = new StringBuilder();
double d = 3.5;

sb.append(d % 1 == 0 ? (int) d : d);

System.out.println(sb.toString());
Run Code Online (Sandbox Code Playgroud)

所以现在我有一个问题,每次,如果是双倍,3.0或者3.5它将被添加为双倍值!仅当我理论上强制执行trueAND时false它有效时......但每次都这不是我想要的。这里有什么问题吗?为什么三元运算符不起作用?

java stringbuilder ternary-operator

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

使用对象的键作为联合类型

我有一个对象(让它被冻结,这样打字稿可以更好地处理它的键):

const obj = Object.freeze({
    'hello': 64,
    'world': 20
}) as {[key: string]: number};
Run Code Online (Sandbox Code Playgroud)

现在我有一个功能,用户可以通过他们的键选择值:

const pick = (keys: Array<string>): Array<number> => {
    const values = [];

    for (const key of keys) {

        // Check if object contains property-key
        if (!(key in obj)) {
            throw new Error(`There's no such key: ${key}`);
        }

        values.push(obj[key]);
    }

    return values;
};
Run Code Online (Sandbox Code Playgroud)

到目前为止看起来不错,并且在运行时运行时完美无缺,我检查用户是否传递了任何无效密钥。但是我如何告诉 TS 只能obj使用来自的密钥?

我可以做,Array<'hello' | 'world'>但每次我添加新属性时都需要更新它,obj这有点烦人。

相关问题,但它们似乎都使用类型,而我只有一个对象(如果有帮助,可以将其冻结):

  1. 从类型键创建联合类型的对象(他有一个类型,我有一个对象)
  2. 获取按对象值类型过滤的对象键的联合类型(基本上与 1 相同。但他想要type而我正在尝试我的对象中构建一个类型) …

types typescript union-types

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

Java中的expressjs-similar框架?

在那里有一个类似于Java的expressjs框架吗?我正在寻找一个可以处理不同HTTP请求并发送响应,cookie等的小框架.如表达式中所示.

javascript java frameworks node.js express

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