假设我有一个典型的“用户”对象,它具有通常的用户名、电子邮件、密码等属性。我想创建和管理一个对象,该对象是此类用户的真正“子集”,并保证不包含密码。这是一个粗略的方法:
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)
我的问题总结:
为什么 TS 会这样?允许分配给具有过多属性的类型是不是很糟糕(因此为什么在上面的 *** 中出现错误)?
是否有我可以采用的 TS 设置或技术使 TS 在上面的 ††† 中出错?
我有“成对出现”的键值对。换句话说,如果我有一个键值对,A:B那么我也想要求我的对象具有C:D,但它也可以没有一对。(想想message:string一对和min-length:number另一对。)是否有一种优雅的方法来使接口由任意数量的此类对组成?
编辑:\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}\nRun Code Online (Sandbox Code Playgroud)\n\n...但是不允许使用以下对象,因为您只有一对的一半:
\n\n{\n //First pair\n message1: string;\n // minLength1: number; // Error \xe2\x80\xa0\n // ...\n}\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa0 错误:如果message1包含,则还必须包含minLength1
我很惊讶地发现,在使用 axios 和 node-fetch 时,AWS ACM 颁发的公共证书会触发“无法验证第一个证书”错误。但是,当我从命令行使用curl 时,我没有收到错误。所以我的问题是:
为什么节点会有这样的行为?Curl 似乎可以使用底层操作系统,该操作系统认可 AWS ACM 颁发的证书的 CA 机构;节点是否有自己的一组 CA 权限?
如何在不启用rejectUnauthorized配置中的选项的情况下解决此问题httpsAgent?有没有办法让节点表现得像curl一样,例如使用操作系统的一组公认的CA机构?AWS ACM 控制台中是否有某些设置可以使证书更适合 axios?
注意:我对配置 axios 以识别任何特定 CA 证书的解决方案不感兴趣(我想要一个通用解决方案,使我能够 ping 多个我不一定控制的 AWS ACM 颁发的证书)。
编辑:我正在使用 OSX 11.3。
谢谢!
在Github上,当您转到分支设置并创建“分支保护规则”时,如何指定“ master”以外的任何分支?我已经尝试了很多类似正则表达式的表达式,但是似乎都没有用:(
这是我的烧瓶代码,位于一个名为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 标头?
要设置例如错误报告,您可以使用 EITHER error_reporting($X)OR set_ini('error_reporting', $X)。但是,例如错误显示,您只能使用set_ini('display_errors', $Y).
是否有任何押韵或理由可以预测何时可以使用专用功能来更改 ini 设置,或者这只是偶然的历史事件?
(我问是因为我想建立一个关于何时使用一种或另一种的心理模型。)
我想在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不等效吗?谢谢。
上下文:我试图在获取资源后使用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) 我正在使用 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 函数使用. 如何才能做到这一点?
我一直在玩我的 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 行为?