小编Jus*_*ant的帖子

如何防止非类 TypeScript 接口上的“@typescript-eslint/unbound method”错误?

下面的代码不使用类或this. 如何防止仅函数(无类)代码中的 typescript-eslint 错误?我知道我可以全局禁用该规则,但该规则对类代码很有用。我知道我可以一次禁用它一行,但考虑到在 TS 接口中定义回调函数是多么普遍,这似乎很痛苦。还有其他方法吗?

这是问题的一个简化示例:

interface FooProps {
  bar(): void;
}

export function foo(props: FooProps) {
  const { bar } = props;
  // ^^^ Avoid referencing unbound methods which may cause unintentional scoping of `this`.
  //     eslint(@typescript-eslint/unbound-method)
  return bar;
}
Run Code Online (Sandbox Code Playgroud)

typescript typescript-eslint

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

组内的LINQ到对象索引+用于不同的分组(也称为ROW_NUMBER与PARTITION BY等效)

经过大量的Google搜索和代码实验,我对一个复杂的C#LINQ-to-objects问题感到难过,在SQL中使用一对ROW_NUMBER()... PARTITION BY函数和一个或两个子查询很容易解决这个问题.

用语言来说,这就是我在代码中尝试做的事情 - 基本要求是从列表中删除重复的文档:

  1. 首先,按(Document.Title,Document.SourceId)对列表进行分组,假设(简化)类定义如下:
    class Document
    {
        string Title;
        int SourceId; // sources are prioritized (ID=1 better than ID=2)
    }
  2. 在该组中,为每个文档分配一个索引(例如,索引0 = =第一个文档,此标题来自此源,索引1 =第二个文档,此标题来自此源,等等).我喜欢SQL中相当于ROW_NUMBER()的东西!

  3. 现在分组(Document.Title,Index),其中Index在步骤#2中计算.对于每个组,只返回一个文档:Document.SourceId最低的文档.

步骤#1很简单(例如codepronet.blogspot.com/2009/01/group-by-in-linq.html),但我对步骤#2和#3感到困惑.我似乎无法构建一个无红色波形的C#LINQ查询来解决所有这三个步骤.

Anders Heilsberg关于这个帖子的帖子是我认为如果我能正确理解语法,那么上面的步骤#2和#3的答案.

我倾向于避免使用外部局部变量来执行索引计算,正如slodge.blogspot.com/2009/01/adding-row-number-using-linq-to-objects.html所建议的那样,因为该解决方案中断了如果外部变量被修改.

最佳地,可以首先完成逐个标题步骤,因此"内部"分组(首先由Source计算索引,然后通过索引来过滤掉重复项)可以对每个"按标题"的少量对象进行操作group,因为每个by-title组中的文档数量通常在100以下.我真的不想要N 2解决方案!

我当然可以用嵌套的foreach循环解决这个问题,但看起来像LINQ这个问题应该很简单.

有任何想法吗?

c# linq linq-to-objects group-by row-number

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

正确的HTTP响应标头在内容过期后导致304s

我希望HTTP响应从现在起24小时后过期(这意味着浏览器直到明天才会对该URL发出任何请求).但是,如果请求在到期后明天重新发出,我想确保浏览器将发送正确的请求标头,以便服务器发送304而不是强制客户端重新下载整个响应主体,如果它没有在服务器上没有改变.而且我希望304也会在24小时后过期.

首先,这个场景可能吗?或者我必须在Expiration风格的缓存和304风格的缓存之间做出选择,但不是两者都有?如果可能的话,那么正确的响应头(初始响应和后续的304)是什么?

如果经常发生,答案会根据浏览器类型/版本而有所不同,那么哪些标题适用于哪些浏览器 - 以及哪些浏览器无法完成我想要的操作?我只对目前使用的最常见的浏览器感兴趣(例如IE6 +,FF3 +,Chrome最新版,Safari最新版)?

如果已经在SO上询问了这个答案,我会道歉 - 我搜索了一会儿,然后空白了.

澄清:我问的是这个问题,因为我正在组建一个自动测试套件来验证,无论服务器平台如何,Web应用程序正在生成正确的HTTP标头,以生成客户端缓存行为,我们希望我们的所有Web应用程序都可以有.所以我对如何配置Apache/IIS/PHP/Rails/Django/JSP/ASP.NET /等不感兴趣(至少现在).生成正确的标题.我只想知道,在HTTP层,只有正确的标题是什么.

更新:我发现这个问题回答了我的部分问题.根据RFC 2616 10.3.5,它说,我应该在服务器返回的304s中包含一个Expires:Cache-Control: max-age标题.这绝对是理想的行为.

然而,这个问题没有回答的是这种符合RFC的方法是否适用于现有的流行浏览器,尤其是IE6/7/8,它们是通常的标准兼容罪魁祸首,还有IE9,FF4 +,最新Chrome和最新版本我们的应用程序也必须支持的Safari.如果这些浏览器中的任何一个不符合RFC的要求,我可以使用变通方法吗?

caching http http-headers

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

使用IE9 F12开发人员工具进行粒度DOM/CSS编辑:可能吗?

为了解决讨厌的IE浏览器布局和CSS问题,我正在尝试使用IE9的开发人员工具来迭代编辑HTML和CSS.理想情况下,我可以与我曾经使用过Firebug和Webkit的Inspector的DOM/CSS操作工作流程保持一致.

换句话说,我希望能够重复编辑单个元素或元素组的HTML和CSS,然后看到我的更改立即反映在屏幕上.

我已经找到了F12工具的"整页"编辑功能,你可以在这里编辑整个页面的HTML或所有CSS作为一个集团,但即使在使用该工具几个小时之后,阅读在线帮助和许多Google搜索,我仍然在努力使用我曾经使用过Firebug的那种更细粒度的编辑.

在我放弃之前,有没有人知道如何使用F12工具......

  • ...编辑特定元素及其子元素,而不是一次编辑整个页面?(像firebug的"编辑HTML"上下文菜单)
  • ...看到编辑视图中的更改在浏览器中立即显示,而不是必须退出编辑视图才能看到更改?
  • ...在编辑视图中轻松找到当前选定的元素(围绕它的蓝色方块)?
  • ...删除单个元素?(在firebug中我可以选择元素并单击"删除")
  • ...为类添加新样式而无需搜索文档中的每个样式以找到适用于我关心的元素的样式?(在firebug中,我只需双击右窗格中的样式).

如果使用IE的F12工具无法实现上述功能,那么DOM/CSS编辑是否有一个很好的替代插件?

顺便说一下,我对这个问题的意图不是打击IE9开发工具(对微软来说,包括开箱即用的这些工具的荣誉),而是要学习如何更有效地使用它们.

另外顺便说一句,我已经阅读了20个关于IE上的firebug等价的其他StackOverflow问题,但其中大部分似乎是关于javascript调试和只读DOM检查.我没有找到任何关于编写DOM/CSS的最近(IE9).因此,我正在问另一个关于这个话题的问题......如果这是一个骗局,我道歉.

css firebug web-inspector web-developer-toolbar internet-explorer-9

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

根据以前的排序进行排序

我正在尝试根据"排序映射"对ID列表进行排序,"排序映射"是一个(ID1, ID2, timestamp)元组数组,用于确定在其他ID之前应对哪些ID进行排序.以下是规则:

  • ID1应该先排序ID2.
  • 时间戳可用于打破与较旧时间戳相关的较新时间戳的关系.例如,给定排序键(C, A, 1/1/1900), (C, B, 1/1/2000)然后B进行排序A.
  • 可以有循环,例如(A, B, 1/1/1950), (B, C, 1/1/1980), (C, A, 1/1/1900).时间戳可用于中断循环,循环中的旧时间戳记录将从排序映射中删除,直到循环消失
  • 如果排序图中不存在ID,则在排序图中存在的任何ID之后对其进行排序

示例:给定排序映射(C, A, 1/1/1900), (C, B, 1/1/2000)(A, B, C, D)要排序的列表,排序的输出将是(C, B, A, D).

把这些规则变成算法让我很难过.这是我到目前为止所拥有的:

  1. 从数据库中获取最新的排序映射.对于每一对唯一的ID,我最多只能获得一条记录.

  2. 从排序图中删除循环.怎么样?或者更简单地忽略循环作为第4步的一部分?

  3. 在内存中转换排序映射以获得最佳性能.例如,构建一个哈希表,其键是排序映射中的每个唯一ID,因此我可以快速找到包含特定ID的所有排序映射行.

  4. 使用通用二进制排序库使用自定义比较函数对我的ID数组进行排序,该函数接受任意两个ID ID1ID2参数.比较功能:

    一个.查找包含ID1ID2使用步骤#3中的哈希表的所有排序映射条目.

    湾 如果我已经有一个记录包含两个ID1并且ID2在排序图中,停止 - 我们知道哪一个应该是第一个!

    C.如果在排序图中找不到ID1和ID2,那么它就是一个平局.返回确定性的任意结果(例如,较低的ID获胜).

    d.如果一个ID在排序图中但另一个不在,则停止.找到的应该先排序.

    即 如果我们到达这里,两个ID都在排序图中,但在排序图中没有可用的直接比较.怎么办?

性能不是一个大问题,因为排序映射的最大大小小于20K行,并且排序的最大ID数小于30. …

c# sorting algorithm

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

如何启用和查看create-react-app代理日志?

如何查看由所使用的代理处理的所有请求和响应的详细日志create-react-app

我不仅要记录一些端点。相反,我想看到的一切,尽可能详细越好,这是怎么回事通过代理。

原因是我从AWS API Gateway服务器收到了403错误,但无法通过浏览器,curl等重现该问题。因此,我想了解通过网络传输的实际标头和内容,看看我的问题是否可能与代理相关。

node-http-proxy aws-api-gateway create-react-app http-proxy-middleware aws-amplify

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

受约束泛型函数内出现令人困惑的“[ts] Type ... is not allocate to type [2322]”错误

我一直对下面代码中的 TypeScript 编译器错误 2322 感到困惑。

function broken<A extends {a: number}>() {
  const foo: A = {a: 1};  // unexpected error: [ts] Type '{ a: number; }' is not assignable to type 'A'. [2322]
  console.log (foo);
}
Run Code Online (Sandbox Code Playgroud)

如果类型是非泛型,类似的代码编译不会出现错误。

function works() {
  interface A {a: number};
  const foo: A = {a: 1};  // no compiler error, as expected
  console.log (foo);
}
Run Code Online (Sandbox Code Playgroud)

为什么第一个函数无法编译?我认为我误解了接口和通用约束之间差异的一些基本知识。

https://codesandbox.io/s/vqx75yqx13

typescript typescript-generics

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

在Chrome开发工具中,如何找到对应于(pre-transpilation)代码行的转换源?

我正在对我的React.js应用程序中的问题进行故障排除,我想查看在Babel编译并由Webpack捆绑后在浏览器中执行的实际javascript.这样做的好方法是什么?

该应用程序使用create-react-app,因此它具有Babel,webpack等的默认CRA配置.源映射正常工作(很好!)但是如果我想查看源映射后面找到正在执行的真实代码怎么办?

我知道我可以/static/js/bundle.js在Chrome Dev Tools的网络窗格中找到,然后使用Cmd + F在该巨大的文件中查找一段代码.我也知道Chrome Dev Tools有一个关闭源映射的选项,但更改持久设置(即使我可以在不重新启动调试的情况下执行此操作,我不确定我可以)似乎没有比Cmd更容易+ F接近上面,特别是因为我必须记得改回来(并重新开始调试?).

相反,我只是在寻找一种在实际生成(转换和捆绑)代码和我的(源映射)代码之间来回切换的方法,而不会中断我的调试工作流程.

这可以在Chrome中使用吗?

javascript google-chrome-devtools source-maps reactjs

6
推荐指数
0
解决办法
283
查看次数

使用TypeScript和webpack在项目之间共享代码

我想在两个TypeScript项目之间共享代码.我不想将共享代码发布到NPM--只是想将共享代码放在一个项目中并在另一个项目中使用它.我正在使用Webpackawesome-ts-loader.当前文件夹结构(简化)如下所示:

/devroot/
  mainProject/
    tsconfig.json
    src/
      shared/
        SomeSharedTypes.ts
  apiProject/
    tsconfig.json
    webpack.config.js
    src/
      UseSomeSharedType.ts
Run Code Online (Sandbox Code Playgroud)

UseSomeSharedType.ts,我希望能够从中导入类型SomeSharedTypes.ts.

我试过这样一个明显的解决方案:

import {SharedType} from '../../mainProject/src/shared/SomeSharedTypes'
Run Code Online (Sandbox Code Playgroud)

但TS编译器给了我这个错误:

TS6059:文件'/devroot/mainProject/src/shared/SomeSharedTypes.ts'不在'rootDir''/ devroot/apiProject'下.'rootDir'应包含所有源文件.

typescript webpack awesome-typescript-loader

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

二进制vs.字符串vs.数字,用于在DynamoDB分区键中存储UUID?

我正在尝试确定对DynamoDB表的分区键使用二进制,数字还是字符串。我的应用程序是React.js / Node.js社交事件管理应用程序,其中存储在DynamoDB中的数据量的一半将用于存储项目和属性与其他项目和属性之间的关系。例如:用户的朋友,活动的参加者等。

因为架构是如此繁琐,并且由于DynamoDB项的最大大小只有400KB,并且出于性能和成本的原因,我担心密钥占用太多空间。就是说,我想使用UUID作为分区键。有众所周知的原因,对于多个节点分发新密钥的分布式无服务器应用程序,他们更喜欢UUID(或类似的熵级别,并且发生碰撞的可能性很小)。

因此,我认为我的选择是:

  1. 使用十六进制编码的UUID(删除破折号后将存储32个字节)
  2. 使用base64(22个字节)编码UUID
  3. 使用z85(20个字节)对UUID进行编码
  4. 对密钥使用二进制类型的属性(16个字节)
  5. 对键使用数字类型的属性(16-18字节吗?)-数字类型只能容纳127位,因此我不得不执行一些技巧,例如剥离版本位,但是对于我的应用程序来说可能还可以。请参阅 在Number类型的DynamoDB属性中可以存储多少位整数数据?有关更多信息。

显然,开发人员的经验需要权衡。使用十六进制字符串最清晰,但最大。编码的字符串较小,但在日志记录,调试等过程中更难处理。Binary和Number比字符串更难,但最小。

我确定我不是第一个考虑这些折衷的人。是否有众所周知的最佳实践或启发式方法来确定应如何在DynamoDB中存储UUID密钥?

如果不是,那么我倾向于使用Binary类型,因为它是最小的存储,并且因为它的本机表示形式(作为base64编码的字符串)可以在人类需要查看和推理键的任何地方使用,包括查询,日志记录,和客户端代码。除了必须从一个转换到/ Buffer如果我使用DocumentClient,我错过了一些问题,在上面的列表中的其他选项之一的二进制类型或优势?

如果有问题,我正计划通过Lambda API进行对DynamoDB的所有访问,因此,即使需要进行转换或编组,也可以,因为我可以在我的API中进行操作。

顺便说一句,这个问题是一个已有 4年历史的问题(DynamoDB中的UUID数据类型)的续集,但是4年是一个快速发展的空间中的一个漫长的时间,因此我认为值得再次提出。

uuid amazon-web-services amazon-dynamodb serverless-framework aws-sdk-js

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