小编Mag*_*nus的帖子

打字稿:防止分配具有比目标接口中指定的更多属性的对象

假设我有一个典型的“用户”对象,它具有通常的用户名、电子邮件、密码等属性。我想创建和管理一个对象,该对象是此类用户的真正“子集”,并保证不包含密码。这是一个粗略的方法:

interface IUserSansPassword {
    username: string;
    email: string;
}

class UserSansPassword implements IUserSansPassword { ... }

interface IUser extends IUserSansPassword {
    password: string;
}

class User implements IUser { ... }
Run Code Online (Sandbox Code Playgroud)

在尝试创建 type 的对象时IUserSansPassword,我预计会出现以下错误:

const userSansPassword: UserSansPassword = new User(); // No TS Error †††
Run Code Online (Sandbox Code Playgroud)

但是,我没有收到 TS 错误,因为令我惊讶的是,TS 不禁止分配具有已建立的“额外”属性的对象。这是令人惊讶的,因为如果我尝试直接使用额外的属性进行定义,我会得到一个错误,如下所示:

const userSansPassword: IUserSansPassword = {
    username: 'jake',
    email: 'jake@snake.com',
    password: '' // TS Error ***
}
Run Code Online (Sandbox Code Playgroud)

我的问题总结:

  1. 为什么 TS 会这样?允许分配给具有过多属性的类型是不是很糟糕(因此为什么在上面的 *** 中出现错误)?

  2. 是否有我可以采用的 TS 设置或技术使 TS 在上面的 ††† 中出错?

typescript

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

具有两个属性或两者都没有的 Typescript 接口

我有“成对出现”的键值对。换句话说,如果我有一个键值对,A:B那么我也想要求我的对象具有C:D,但它也可以没有一对。(想想message:string一对和min-length:number另一对。)是否有一种优雅的方法来使接口由任意数量的此类对组成?

\n\n

编辑:\n为了澄清,我想为允许这些的对象设计一个接口:

\n\n
{\n    //First pair\n    message1: string;\n    minLength1: number;\n    //Second pair\n    message2: string;\n    minLength2: number;\n    // ...\n}\n\n{\n    //First pair omitted altogether\n\n    //Just the second pair\n    message2: string;\n    minLength2: number;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

...但是不允许使用以下对象,因为您只有一对的一半:

\n\n
{\n    //First pair\n    message1: string;\n    // minLength1: number; // Error \xe2\x80\xa0\n    // ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa0 错误:如果message1包含,则还必须包含minLength1

\n

interface typescript

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

如何让 axios 使用 AWS ACM 公共证书?

我很惊讶地发现,在使用 axios 和 node-fetch 时,AWS ACM 颁发的公共证书会触发“无法验证第一个证书”错误。但是,当我从命令行使用curl 时,我没有收到错误。所以我的问题是:

  1. 为什么节点会有这样的行为?Curl 似乎可以使用底层操作系统,该操作系统认可 AWS ACM 颁发的证书的 CA 机构;节点是否有自己的一组 CA 权限?

  2. 如何在不启用rejectUnauthorized配置中的选项的情况下解决此问题httpsAgent?有没有办法让节点表现得像curl一样,例如使用操作系统的一组公认的CA机构?AWS ACM 控制台中是否有某些设置可以使证书更适合 axios?

注意:我对配置 axios 以识别任何特定 CA 证书的解决方案感兴趣(我想要一个通用解决方案,使我能够 ping 多个我不一定控制的 AWS ACM 颁发的证书)。

编辑:我正在使用 OSX 11.3。

谢谢!

curl amazon-web-services node.js axios aws-acm

10
推荐指数
0
解决办法
1654
查看次数

Github“分支名称模式”取反

在Github上,当您转到分支设置并创建“分支保护规则”时,如何指定“ master”以外的任何分支?我已经尝试了很多类似正则表达式的表达式,但是似乎都没有用:(

regex github

6
推荐指数
2
解决办法
2728
查看次数

为什么 Flask 将此标头设置为“连接:关闭”?

这是我的烧瓶代码,位于一个名为main.py-- 我试图让一个简单的服务器发送事件流运行的文件中:

import time
from flask import Flask, Response
from werkzeug.serving import WSGIRequestHandler

app = Flask(__name__)


def counter():
    i = 0
    while True:
        i = i+1
        yield "data: " + str(i) + "\n\n"
        time.sleep(1)


@app.route('/stream')
def send_message():
    return Response(
        counter(),
        mimetype='text/event-stream',
        headers={
            'Content-Type': 'text/event-stream',
            'Cache-Control': 'no-cache',
            'Connection': 'keep-alive',
            'Keep-Alive': 'timeout=55'
        }
    )


if __name__ == "__main__":
    WSGIRequestHandler.protocol_version = "HTTP/1.1"
    app.run(port=5001)
Run Code Online (Sandbox Code Playgroud)

当我运行此应用程序并python main.py在浏览器中打开它时,响应标头显示 BOTH Connection: keep-aliveAND Connection: close

在此输入图像描述

为什么会发生这种情况?如何让 Flask 只使用 keep-alive 标头?

python flask

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

为什么php有时只有一个专门的函数来设置ini参数?

要设置例如错误报告,您可以使用 EITHER error_reporting($X)OR set_ini('error_reporting', $X)。但是,例如错误显示,您只能使用set_ini('display_errors', $Y).

是否有任何押韵或理由可以预测何时可以使用专用功能来更改 ini 设置,或者这只是偶然的历史事件?

(我问是因为我想建立一个关于何时使用一种或另一种的心理模型。)

php

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

否定打字稿类型?

我想在Typescript中创建一个简单的NOT运算符,在该脚本中,您将所有原语组合到某种类型A的并集中,这些原语不是第二种类型B的并集的原语成员。这可以使用条件类型来完成。例如,如果您有以下类型:

type A = 'a' | 'b' | 'c';
type B = 'c' | 'd' | 'e'; 
Run Code Online (Sandbox Code Playgroud)

...那么我想将它们映射到第三个派生类型[A-B],在这种情况下,将产生:

type C = 'a' | 'b'
Run Code Online (Sandbox Code Playgroud)

使用下面所示形式的条件,这似乎是可行的。但是,我完全感到困惑,为什么下面的NOT运算符似乎给了我想要的东西,但是显式地拼写出完全相同的条件逻辑却没有:

type not_A_B_1 = A extends B ? never : A;   // 'a' | 'b' | 'c'

type Not<T, U> = T extends U ? never : T;   
type not_A_B_2 = Not<A, B>                  // 'a' | 'b'
Run Code Online (Sandbox Code Playgroud)

这里

有人可以告诉我我是否在这里缺少TS的细微之处,这可以解释为什么not_A_B_1并且not_A_B_2不等效吗?谢谢。

negation typescript

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

了解rxjs6中的合并(特别是redux-observable)

上下文:我试图在获取资源后使用redux-observablewith rxjs v6触发多个操作。

问题:我可以在获取资源后触发一个动作,没问题;但是我试图触发多个动作的尝试让我很沮丧。具体来说,我下面显示的使用rxjs merge触发多个动作的尝试看起来很标准,并且接近已记录的示例(请参见此处的示例),以至于我无法理解哪里出了问题。这是我的代码的细分,其中注释中指示了打字稿类型;为了简化问题,我简化了事情:

import { from } from "rxjs"; 
import { merge, mergeMap, map } from "rxjs/operators";
import { AnyAction } from "redux";

... //Setup related to rxjs-observable epics

function myEpic(
    action$: Observable<AnyAction>,
    state$: any,
    {fetchPromisedStrings}: any
) {
    return action$.pipe(
        ofType('MY_ACTION'),
        mergeMap(
            action => 
{
    const demoAction1: AnyAction = {type:'FOO1', payload:'BAR1'};
    const demoAction2: AnyAction = {type:'FOO2', payload:'BAR2'};

    const w = from(fetchPromisedStrings())     //const w: Observable<string[]>
    const x = w.pipe( map(() …
Run Code Online (Sandbox Code Playgroud)

merge redux-observable rxjs6

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

如何将 .env 文件中的环境变量读取到 terraform 脚本中?

我正在使用 terraform 在 aws 上构建一个 lambda 函数。用于上传环境变量的 terraform 脚本中的语法是:

resource "aws_lambda_function" "name_of_function" {

  ...

  environment {
    variables = {
      foo     = "bar"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在.env我的 repo 中有一个文件,里面有一堆变量,例如email='admin@example.com',我希望 terraform 从该文件中读取(一些)它们并将它们注入到空间中,以便 env vars 上传并可供 lambda 函数使用. 如何才能做到这一点?

terraform

3
推荐指数
4
解决办法
4551
查看次数

如何在 iTerm2 上的 tmux 中修复/恢复鼠标控件?

我一直在玩我的 iTerm2 shell 设置。以前,我可以通过简单地添加set -g mouse on到.tmux 中的鼠标控件来调整窗格等的大小.tmux.conf

但是,现在它在 iTerm2 中不起作用(但它在内置终端应用程序中起作用)。我不确定我做了什么把事情搞砸了。我最好的猜测是我用过的这条线.tmux.conf是罪魁祸首。

set -g terminal-overrides 'xterm*:smcup@:rmcup@'
Run Code Online (Sandbox Code Playgroud)

不知道该语法是什么意思(我从 SO 答案中复制/粘贴)。即使我从 中删除该行.tmux.conf,鼠标模式仍然不起作用。任何想法如何修复/恢复 iTerm2 中的标准 tmux-mouse-mode 行为?

tmux iterm2

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