我编写了一个脚本作为用户脚本,并使用 Greasemonkey 在特定网站上运行它。
它工作得很好,但我想在 Firefox 开发者工具网络选项卡中查看我的脚本发送的请求。目前它显示页面的请求而不是我的脚本的请求。
我应该怎么办?
javascript firefox-developer-tools firefox-57+ greasemonkey-4
为什么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)
在我的领域特定语言中,我可以使用虚线路径引用树状结构内的某些内容,除了我还可以连续两个点“向上”:
"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)所以我刚才在回答这个问题的时候,我发现了一些奇怪的东西,我找不到解释。
如果我们有一个泛型函数,并且参数是可选的,并且参数的类型使用泛型,如下所示:
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) 当我在脑海中思考 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) 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)我正在学习介入。下面的代码取自课程(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) 我有一个数组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" 的数组创建类型元组。我需要“相反”,我知道这是可能的。
我正在摆弄 Prism.js,由于某种原因,突出显示typescript代码无法按预期工作。Prism.js 无法对片段进行事件标记...
任何帮助/想法表示赞赏。
我正在调试一些代码来计算矩阵的行列式,当我找到原因时感到非常失望。简单来说,这段代码:
-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 中找不到任何内容。
由于转义,我认为给出以下代码:
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) 你好,我想找出一个对象是否有任何键值是正确的。
以下仅适用于没有嵌套对象的对象。
我正在尝试检查对象中的任何键(无论父项还是子项)是否具有真实值
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) 本质上,我试图编写的是一个函数,它接受不同类型的数组(用它做一些事情),然后仅基于该数组中的最后一个元素返回一个类型(先前的元素已被处理,但仅处理了最后一个元素用于返回值)。
我知道我可以编写一个函数,该函数返回基于所有元素类型的数组,如下所示。
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(或数组,即使这只是任何元素的类型)的最后一个元素的类型。