小编moc*_*cha的帖子

Greasemonkey XHR 未显示在 Firefox 网络开发工具中

我编写了一个脚本作为用户脚本,并使用 Greasemonkey 在特定网站上运行它。

它工作得很好,但我想在 Firefox 开发者工具网络选项卡中查看我的脚本发送的请求。目前它显示页面的请求而不是我的脚本的请求。

我应该怎么办?

javascript firefox-developer-tools firefox-57+ greasemonkey-4

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

为什么模板文字类型扩展 Record<string,any>?

为什么test1返回1

type test1 = `${number}px` extends Record<string, any> ? 1 : 0; // test1 ==> 1
type test2 = `${number}px` extends object ? 1 : 0;              // test2 ==> 0
type test3 = `100px` extends Record<string, any> ? 1 : 0;       // test3 ==> 0
type test4 = `100px` extends object ? 1 : 0;                    // test4 ==> 0
Run Code Online (Sandbox Code Playgroud)

游乐场链接

typescript

5
推荐指数
0
解决办法
207
查看次数

分割点路径,但用符号替换两个点

在我的领域特定语言中,我可以使用虚线路径引用树状结构内的某些内容,除了我还可以连续两个点“向上”:

"sibling"         // gets sibling
".sibling"        // same as above
".sibling.nested" // indexes into sibling with 'nested'
"..down"          // goes up the hierarchy, then down the key 'down'
"down.."          // doesn't do anything, really, goes down and then back up
".."              // references parent
"down..down"      // same as "down"
Run Code Online (Sandbox Code Playgroud)

我需要像这样分割上面的内容:

["sibling"]
["sibling"]
["sibling", "nested"]
[symbol, "down"]
["down", symbol]
[symbol]
["down", symbol, "down"]
Run Code Online (Sandbox Code Playgroud)

本质上,..用符号替换 the,但.通常用 single 分割。我可以像这样分割普通的点嵌套路径(甚至尊重转义句点):

path.split(/(?<!\\)\./)
Run Code Online (Sandbox Code Playgroud)

键可能包含任何字符,因此单词边界有时不起作用。

但我很难找到一个可以替代... 我当前的解决方案是将所有空字符串替换为符号(空字符串意味着连续有两个句点),并将一个字符附加到路径的末尾,在分割完成后删除:

const symbol = Symbol(); …
Run Code Online (Sandbox Code Playgroud)

javascript

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

检查可选泛型参数是否存在 T &amp; ({} | null) 中未定义的结果

所以我刚才在回答这个问题的时候,我发现了一些奇怪的东西,我找不到解释。

如果我们有一个泛型函数,并且参数是可选的,并且参数的类型使用泛型,如下所示:

function ok<T>(thing?: T) {

}
Run Code Online (Sandbox Code Playgroud)

然后,当我们尝试缩小thing函数内部范围,只T显式检查它是否未定义时:

thing !== undefined ? thing : 0;
//                    ^? T & ({} | null)
Run Code Online (Sandbox Code Playgroud)

然后thing缩小到T & ({} | null). 而且,当我们使用时typeof,这会缩小到预期的范围T。这与 if 语句的行为相同。

typeof thing !== "undefined" ? thing : 0;
//                             ^? T
Run Code Online (Sandbox Code Playgroud)

这是一个最小的可重现示例,其中包含我提到的所有内容:

function ok<T>(thing?: T) {
    thing !== undefined ? thing : 0;
    //                    ^?

    if (thing !== undefined) {
        thing
    //  ^?
    } …
Run Code Online (Sandbox Code Playgroud)

typescript

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

仅要求一个元素为某种类型的数组

当我在脑海中思考 API 设计时,我突然想到了这一点。简而言之,有没有办法定义这样的类型?

type SpecialArray<Unique, Bland> = [...Bland[], Unique, ...Bland[]];
Run Code Online (Sandbox Code Playgroud)

但这当然给了我“一个休息元素不能跟随另一个休息元素”。

我能到达的最接近的是:

type SpecialArray<Unique, Bland> = [...Bland[], Unique] | [Unique, ...Bland[]];
Run Code Online (Sandbox Code Playgroud)

它只允许“唯一”元素位于数组中的第一个或最后一个。请注意,这意味着该数组还必须至少包含一个元素(唯一的元素)。

是的,我已经看到了Typescript: only allowed one attempts of a value in an array,但是该解决方案不适用于任何长度,并且我无法找到有关此问题的任何其他资源。我知道我可以编写一个辅助函数来强制/推断我的类型,如下所示:

type Count<A extends readonly any[], T, Counter extends any[] = []> = A extends [infer H, ...infer R] ? [H] extends [T] ? Count<R, T, [...Counter, H]> : Count<R, T, Counter> : Counter;

type IsSpecial<A extends readonly any[], Unique, Bland> =
    Count<A, Unique>["length"] extends 1 …
Run Code Online (Sandbox Code Playgroud)

typescript

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

Canvas context.measureText 未给出准确的结果

context.measureText我正在测试Chrome v106.0.5249.91并得到一些不一致的结果。

以下是测试的字符串和结果宽度:

"888" = 50.0537109375
"881" = 50.0537109375
"811" = 48.3984375
"111" = 46.7431640625
Run Code Online (Sandbox Code Playgroud)

当我在字符串中用8'替换 ' 时,存在明显的差异,但为什么报告的宽度与相同1888881

function getTextWidth(text, font) {
  // if given, use cached canvas for better performance
  // else, create new canvas
  var canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));
  var context = canvas.getContext("2d");
  context.font = font;
  var metrics = context.measureText(text);
  return metrics.width;
};

console.log(getTextWidth("888", "bold 30px helvetica")); // = 50.0537109375

console.log(getTextWidth("881", "bold 30px helvetica")); // …
Run Code Online (Sandbox Code Playgroud)

javascript html5-canvas

5
推荐指数
0
解决办法
213
查看次数

编译时插入不起作用

我正在学习介入。下面的代码取自课程(CMU 15-213),但是,当我编译时,出现此警告“mymalloc.c:6:29: warning: all paths through this function will call myself [-Winfinite-recursion]” 。

据我了解,main() 中对 malloc 的调用将转为对 mymalloc() 的调用。在 mymalloc() 内部,再次调用 malloc,因此发生循环。

//int.c

#include <stdio.h>
#include "malloc.h"

int main() {
    int *p = malloc(32);
    free(p);
    return (0);
}
Run Code Online (Sandbox Code Playgroud)
//malloc.h

#include <stdlib.h>
#define malloc(size) mymalloc(size)
#define free(ptr) myfree(ptr)

void *mymalloc(size_t size);
void myfree(void *ptr);
Run Code Online (Sandbox Code Playgroud)
//mymalloc.c

#ifdef COMPILETIME
#include <stdio.h>
#include "malloc.h"

/* malloc wrapper function */
void *mymalloc(size_t size) {
    void *ptr = malloc(size);
    printf("malloc(%d)=%p\n",
           (int)size, ptr);
    return ptr;
}

/* …
Run Code Online (Sandbox Code Playgroud)

c function-interposition

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

将 as const 数组展开为其可变的非元组对应项

我有一个数组as const

// just a simple mock class
class Child { _ = "" }

const child = new Child();

const schema = [[child], child] as const; // readonly [readonly [Child], Child];
Run Code Online (Sandbox Code Playgroud)

该数组表示类型的联合,因此在这里,它将表示一个数组Child或另一个数组Child(更深一层)。本质上,我想将 的类型转换schema(Child | Child[])[].

type T = UnwrapAsConstArray<readonly [readonly [Child], Child]> // => (child | Child[])[]
Run Code Online (Sandbox Code Playgroud)

我正在努力寻找使这种转变成为可能的逻辑。是我可怜的尝试,它的效果并不像你在底部看到的那么好。

一个可以尝试制定解决方案的游乐场,其中包含一些测试用例和预期行为。

请记住,我希望解决方案是递归的并且适用于任意数量的嵌套。

类似的问题:从不带 "as const" 的数组创建类型元组。我需要“相反”,我知道这是可能的。

typescript

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

Prismjs 不突出显示打字稿代码片段

我正在摆弄 Prism.js,由于某种原因,突出显示typescript代码无法按预期工作。Prism.js 无法对片段进行事件标记...

这是codesandbox 中的演示

任何帮助/想法表示赞赏。

javascript typescript prismjs

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

-1 和 pow 的特殊行为

我正在调试一些代码来计算矩阵的行列式,当我找到原因时感到非常失望。简单来说,这段代码:

-1i64.pow(i as u32)
Run Code Online (Sandbox Code Playgroud)

总是导致-1. 我发现我可以使用i64::pow替代方法,或者用-1i64括号括起来来解决问题:

i64::pow(-1, i as u32)
(-1i64).pow(-1, i as u32)
Run Code Online (Sandbox Code Playgroud)

我感到失望和悲伤,因为 rustc 告诉我使用第一个例子:

  |
3 |         println!("{}", -1.pow(i as u32));
  |                              ^^^
  |
help: you must specify a concrete type for this numeric value, like `i32`
  |
3 |         println!("{}", -1_i32.pow(i as u32));
  |                            ~~~~~
Run Code Online (Sandbox Code Playgroud)

我尝试过带下划线和不带下划线,它们仍然总是导致-1。我的问题是,为什么会这样?这里括号的作用是什么?-1i64.pow(i as u32) 实际上是做什么的?我在文档、Rust 书籍或 Stack Overflow 中找不到任何内容。

这里有一个游乐场

rust

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

为什么 Rust 对 '{{' 和 '}}' 的处理方式不同?

由于转义,我认为给出以下代码:

fn main() {
    println!("{}}");
    println!("{{}");
}
Run Code Online (Sandbox Code Playgroud)

我会收到类似于unmatched '}' in format string第一个println!unmatched '{' in format string第二个的错误消息println!。然而,我实际上在两种使用中都遇到了相同的错误println!

error: invalid format string: unmatched `}` found
 --> src/main.rs:2:17
  |
2 |     println!("{}}");
  |                 ^ unmatched `}` in format string
  |
  = note: if you intended to print `}`, you can escape it using `}}`

error: invalid format string: unmatched `}` found
 --> src/main.rs:3:17
  |
3 |     println!("{{}");
  |                 ^ …
Run Code Online (Sandbox Code Playgroud)

rust

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

查找任意键值是否为 true

你好,我想找出一个对象是否有任何键值是正确的。

以下仅适用于没有嵌套对象的对象。

我正在尝试检查对象中的任何键(无论父项还是子项)是否具有真实值

const odb = {
  "all": true,
  "allA": false,
  "allB": false,
  "allC": {
    "allD": false,
    "allE": false,
  }
}


const isAnyKeyValueTrue = o => !Object.keys(o).find(k => !o[k]);

console.log(isAnyKeyValueTrue(odb));
Run Code Online (Sandbox Code Playgroud)

javascript

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

在 TypeScript 中提取元组最后一个元素的类型

本质上,我试图编写的是一个函数,它接受不同类型的数组(用它做一些事情),然后仅基于该数组中的最后一个元素返回一个类型(先前的元素已被处理,但仅处理了最后一个元素用于返回值)。

我知道我可以编写一个函数,该函数返回基于所有元素类型的数组,如下所示。

function arraymod<T extends unknown[]>(
  ...input: {
    [index in keyof T]: ParamType<T[index]>
  }
): T {
  return input.map(unparam);
}
Run Code Online (Sandbox Code Playgroud)

我想要的是一个执行类似操作的函数。

function takelast<T extends unknown[]>(
  ...input: {
    [index in keyof T]: ParamType<T[index]>
  }
): LastElementOf<T> /* What would this return type be? */ {
  return unparam(input[input.length - 1]);
Run Code Online (Sandbox Code Playgroud)

ParamType<T>只是unparam一些用于说明的示例类型/函数)

如何编写一个类型LastElementOf<T>来给出元组T(或数组,即使这只是任何元素的类型)的最后一个元素的类型。

typescript typescript-generics

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