我需要一个接口来根据需要制作其他接口的某些字段。例如:我有 IUserInterface:
interface IUser {
name: string;
role?: string;
}
interface IUserFromDB {
id: number;
name: string;
role: string;
}
Run Code Online (Sandbox Code Playgroud)
当我创建新用户时,角色是可选的。数据库设置默认角色,当我从数据库中选择用户时 -role必须位于userObject. 我可以像上面写的那样编写接口,但在实际项目中,这种方法会创建大量冗余代码。所以,我需要一些界面,帮助我获取旧界面并根据需要创建一些可选字段。
我想要这样的东西:
interface IUser {
name: string;
role?: string;
}
type IUserFromDB = WithRequired<IUser, 'role'[|...]> & {
id: number;
...;
};
Run Code Online (Sandbox Code Playgroud)
请帮我创建这个WithRequired类型。
我有一个 Nestjs 应用程序,我需要将它与 webpack 捆绑在一起。捆绑包应包含整个脚本和所有文件。所以我创建了我的 webpack 配置:
const webpack = require('webpack');
const path = require('path');
module.exports = {
entry: {
backend: './src/index.ts',
},
target: 'node',
module: {
rules: [
{
test: /.ts$/,
use: 'ts-loader',
},
{
test: /\.(graphql|gql)$/,
exclude: /node_modules/,
loader: 'webpack-graphql-loader',
},
{
test: /\.mjs$/,
include: /node_modules/,
type: "javascript/auto",
}
],
},
externals: ['fsevents'],
mode: 'production',
resolve: {
extensions: ['.ts', '.mjs', '.js', '.json'],
},
output: {
path: path.join(__dirname, 'bundled'),
library: 'handler',
libraryTarget: "commonjs2"
},
plugins: [
new webpack.IgnorePlugin({
checkResource(resource) …Run Code Online (Sandbox Code Playgroud) 我阅读了有关 aws VPC 的内容,并尝试寻找使用 NAT 的任何意义。如果我理解正确的话,当我们拥有具有两个子网(公共子网和私有子网)的 VPC 时,就会使用 NAT。如果我们想允许私有子网向全球网络发出请求(例如软件更新),但阻止所有入站流量 - 我们可以在公共子网中设置 NAT 并将该 NAT 与私有子网连接。
但同时我们可以为私有子网创建 ACL 并阻止所有入站流量。因此,如果需要,它将能够下载软件更新。
那么,如果以上都是正确的,为什么我们需要 NAT?
在我的第一个项目,我们使用express和mysql图书馆没有任何ORM,我们打开连接时,控制器启动和关闭在这方面finaly块。我一直认为这个方法是对的。
但是现在我开始用 NestJS + TypeORM 做一个应用程序,当我的服务器启动时 - 连接已准备好打开!我想知道是否可以,开始谷歌但更困惑。
例如人们说
“你必须只在需要的时候打开连接,使用后立即关闭它,因为你不应该保持 1 个打开的连接,其他用户可能需要它”。
他们还说:
“你必须使用连接池。连接池打开 1+ 个连接并保持它们打开。当你的应用程序中的某个线程需要它时,它不会浪费时间打开”..
什么?这两个句子互相排斥。
所以,
问题1:谁是对的?
问题2:
如果 TypeORM 使用“连接池”,那么它的优势是什么,如果我的控制器将始终使用“默认连接”?
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
) {}
findAll(): Promise<User[]> {
return this.usersRepository.find();
}
}
Run Code Online (Sandbox Code Playgroud)
如果 1kk 用户同时请求此控制器 - TypeORM 不会在用户池中创建额外连接以防止一个连接过载。那么,TypeORM 连接池有什么意义呢?
我将创建一个用于从 Internet 访问文件的应用程序。我不想实现 UI,而是让它们从其他文件管理器中可见。因此,我选择实现一个文档提供程序。我做到了。在接下来的图片中,您可以看到我打开“文件”应用程序,找到“我的文档提供程序”并可以访问其文件。
然而,它是一个模拟器。当我尝试在物理设备上使用该应用程序时,我发现我无法查看文档提供者。我使用小米红米 Note 5 Pro(android 9.0),没有“文件”应用程序。我测试了 Google Play 中排名前 20 的文件管理器,甚至 MIUI 内置的文件资源管理器,但它们都不能向我显示我的“我的文档提供程序”。
仅当尝试从 Gmail 应用程序附加文档时,我才设法看到我的文档提供程序。但这不是我需要的。
问题:
最后我找到了解决方案。据我了解,标准应用程序“文件”内置于任何设备中。然而,制造商可能“隐藏”这个应用程序并提供一些模拟。MIUI 上有一个“文件管理器”。在许多三星设备以及 Pixel 2 XL 上,它是“Google 文件”应用程序。他们都没有看到文档提供者。只有“文件”应用程序可以。
当您使用 SAF 时,“文件”应用程序仍然可以作为一个选项进行访问(例如使用 ACTION_OPEN_DOCUMENT 启动 Intent)。但您仍然无法独立启动该应用程序。不过,您可以从 Google Play 下载“文件快捷方式”。打开它时,您可以选择一个应将“文件快捷方式”作为快捷方式的应用程序。我选择“文件”应用程序,一切正常(直到我选中“记住我的选择”选项才起作用)。在 Pixel 2 和 Redmi Note 5 上,我都可以看到我的文档提供程序。这是一个好消息,因为我不必浪费时间来创建 UI!
PS 请注意,我上面描述的内容并非来自可靠来源。根据我的观察和理解,我使用了“隐藏应用程序”一词以及在任何设备上预安装“文件”的事实。
PPS 另外,我发现在 Pixel 2 上的“Google 文件”应用程序中还有一种打开“文件”的方法:浏览 -> 其他存储 -> 系统痕迹。由于某种原因,红米 Note 5 上没有“其他存储”按钮。
我开始研究material-ui并在SandBox中创建一个简单的应用程序: https: //codesandbox.io/s/eager-ride-cmkrc
jss 的风格对我来说很不寻常,但是如果你帮我做这两个简单的练习,那么我就会明白一切。
第一:我想要将ButtonLeft和的共同属性合并ButtonRight到新类中并扩展它:(https://github.com/cssinjs/jss-extend#use-rule-name-from-the-current-styles-object)
ButtonControll: {
display: "none",
position: "absolute",
fontSize: "24px"
},
ButtonLeft: {
extend: 'ButtonControll',
left: "0",
},
ButtonRight: {
extend: 'ButtonControll',
right: "0",
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用=(
第二:我希望当您将鼠标悬停在容器上时出现箭头,所以我这样写:
"&:hover .MuiIconButton-root": {
display: "block"
}
Run Code Online (Sandbox Code Playgroud)
问题:MuiIconButton-root它是所有 IconButtons 的基类名称吗?但我想要这样的东西:
"&:hover ButtonLeft": {
display: "block",
backgroundColor: 'red'
},
"&:hover ButtonRight": {
display: "block",
fontSize: '50px'
}
Run Code Online (Sandbox Code Playgroud)
请帮助我完成这两个简单的任务,然后我就会明白一切=)
nestjs ×2
amazon-vpc ×1
android ×1
database ×1
javascript ×1
jss ×1
material-ui ×1
reactjs ×1
typeorm ×1
typescript ×1
webpack ×1