小编ten*_*its的帖子

`as const` 替代缩小数组文字元组,以避免 `readonly` 修饰符

我们用来as const缩小类型:

[ {foo: 'foo' }, { bar: 'bar' } ] as const
Run Code Online (Sandbox Code Playgroud)

但这也readonly为所有道具和值添加了修饰符。到目前为止const,这是有道理的,但我希望缩小范围,不使用readonly修饰符,因为您通常想要修改元组中的对象,或者只是将其进一步传递给某个方法,该方法具有相同的接口,但没有深层readonly

let foo = [ {foo: 'foo' }, { bar: 'bar' } ]
Run Code Online (Sandbox Code Playgroud)

这里 foo 的类型是:

({
    foo: string;
    bar?: undefined;
} | {
    bar: string;
    foo?: undefined;
})[]
Run Code Online (Sandbox Code Playgroud)

但我希望得到

[{
    foo: string;
}, {
    bar: string;
}]
Run Code Online (Sandbox Code Playgroud)

我们使用as const,但在大多数情况下这是不可能的,因为foo/bar得到深度嵌套的readonly修饰符,我们可以使用类似的东西

type DeepWritable<T> = { -readonly [P in keyof T]: DeepWritable<T[P]> …
Run Code Online (Sandbox Code Playgroud)

typescript typescript-typings

13
推荐指数
1
解决办法
2161
查看次数

使用带有关键帧动画的DOM背景图层和用于物理引擎的Canvas图层

在我的下一个游戏中,我计划将DOM背景图层与其上方的画布混合在一起.我想将非交互式背景动画移动到该DOM图层,并使用关键帧动画进行变换和不透明度变化,例如移动云,飞机等.

至于我,有2个专业人士:

  1. 简单的关键帧动画更容易创建.恕我直言

  2. 最有趣的一点-它应该提高性能:

    • transformopacity动画可以是GPU加速和在单独的线程执行.
    • 我们不在渲染帧中执行这些动画,所以我们在这里保存几毫秒.

还是我错了?也许浏览器需要更多的时间来制作这些图层的组合,还是有其他一些注意事项?

这种技术的最大相反之处在于,我们可以将它主要用于装饰动画,而不是用于我们的游戏,因为控制这些动画是一项艰巨的任务.

有没有人有这种分层的经验?

先感谢您.

javascript html5 canvas css-animations

12
推荐指数
1
解决办法
230
查看次数

为什么Angular中的子组件应该通过NgModule注册?封装怎么样?

我对其他框架和架构原则有一些经验,我绝对不理解Angular团队决定directivies在RC6中弃用Component 的属性而转而支持declarationsNgModule.

通常,体系结构是关于封装的,但是如果组件的某些功能性应该由子组件封装,则子组件"泄漏"到模块,现在应该注册.

  1. 那么为什么在模块中有一个组件的逻辑树,所有这些都应该在NgModule中注册"普通"?

  2. 这种方法是否不会导致大量进口和退出的ngmodule?

我知道我们可以将所有内容拆分为多个模块,但在单个模块中,这样的全局"加载和注册"会让我记住script [src]html中的一堆全局标记.我以为我们已经离开了这个模式,但看起来像Angular回归它.

看来,我想念一下,有人可以解释一下吗?


[ 编辑1 ](打破AOT编译,请参阅edit-2)现在,我们模仿嵌套组件声明,以便每个组件导出使用过的组件列表,然后在NgModule中我们遍历所有根组件,收集它们的依赖关系并准备完整declarations列表.

它看起来像这样:

src/app    
    - /components/home-view/
        - /toolbar
            /menu-button
                - menu-button.component.ts

            - toolbar.component.ts

        - home-view.component.ts

    - app.module.ts
Run Code Online (Sandbox Code Playgroud)

app.module.ts

import { HomeViewComponent } from './components/home-view/home-view.component';

namespace Utils {
    export function flatternDirectives (arr: any[] = []): any[] {
        const declarations = arr.reduce((compos, compo) => {
            compos.push(...flatternDirectives(compo.directives), compo);
            return compos;
        }, []);
        return Array.from(new Set(declarations));
    }
}
@NgModule({
    declarations: Utils.flatternDirectives([
        HomeViewComponent,    
    ]),
    bootstrap: …
Run Code Online (Sandbox Code Playgroud)

angular

11
推荐指数
1
解决办法
329
查看次数

EntityFramework CodeFirst:CASCADE DELETE用于同一个表的多对多关系

我有EntityFramework的条目删除问题和同一实体的多对多关系.考虑这个简单的例子:

实体:

public class UserEntity {
    // ...
    public virtual Collection<UserEntity> Friends { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

流畅的API配置:

modelBuilder.Entity<UserEntity>()
    .HasMany(u => u.Friends)
    .WithMany()
    .Map(m =>
    {
        m.MapLeftKey("UserId");
        m.MapRightKey("FriendId");
        m.ToTable("FriendshipRelation");
    });
Run Code Online (Sandbox Code Playgroud)
  1. 我是否正确,无法Cascade Delete在Fluent API中定义?
  2. UserEntity例如,删除a的最佳方法是什么Foo

    现在找我,我一定要ClearFooFriends集合,然后我需要加载的所有其他UserEntities,其中包含FooFriends,然后取出Foo从每个列表,之前我删除FooUsers.但这听起来太复杂了.

  3. 是否可以直接访问关系表,以便我可以删除这样的条目

    // Dummy code
    var query = dbCtx.Set("FriendshipRelation").Where(x => x.UserId == Foo.Id || x.FriendId == Foo.Id);
    dbCtx.Set("FriendshipRelation").RemoveRange(query);
    
    Run Code Online (Sandbox Code Playgroud)

谢谢!

Update01:

  1. 我知道这个问题的最佳解决方案是在调用之前执行原始sql语句SaveChanges: …

c# entity-framework code-first ef-code-first entity-framework-6

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

需要使用TypeScript,SystemJS和Electron的nodejs"child_process"

我正在研究一个简单的nodejs 电子(以前称为原子壳)项目.我正在使用angular 2编写它,使用项目设置与他们在打字稿文档中建议的相同项目设置:

TSC:

{
  "compilerOptions": {
    "target": "es5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
  "node_modules",
  "typings/main",
  "typings/main.d.ts"
  ]
}
Run Code Online (Sandbox Code Playgroud)

我需要运行一个命令,我发现我可以使用节点"child_process"来完成它.无论如何我无法找到"import"或"require"它,同时从node.d.ts文件中使用它的类型.我在node.d.ts文件中找到了符合我需要的"child_process"接口,这就是它在node.d.ts文件中查看的方式:

    declare module "child_process" {
    import * as events from "events";
    import * as stream from "stream";

    export interface ChildProcess extends events.EventEmitter {
        stdin:  stream.Writable;
        stdout: stream.Readable;
        stderr: stream.Readable;
        pid: number;
        kill(signal?: string): void;
        send(message: any, sendHandle?: any): void;
        disconnect(): void;
        unref(): void;
    }

    export function spawn(command: string, …
Run Code Online (Sandbox Code Playgroud)

require node.js typescript systemjs electron

9
推荐指数
3
解决办法
2万
查看次数

Docker:将`/ uploads`目录绑定到Amazon S3 Storage

我想将我的php站点从虚拟机迁移到docker容器.我的网站将所有上传的文件保存到uploads目录中.现在我想将所有文件传输到S3 Storage并将进一步的上传保存到Amazon S3.但我不想重写php文件上传器类.是否可以在Docker中创建符号链接文件夹或虚拟文件夹,以便将uploads/**路径上的所有写入和读取"重定向"到S3存储.

Docker支持S3存储驱动程序,但我是docker的新手,并且不知道文件夹应该如何映射到dockerfile中的s3存储.我没有找到其他例子.

谢谢您的帮助.

更新:请参阅Taruns的回答.如果您也知道,托管环境中的AWS Storage Gateway是唯一一个很好的解决方案,请提升或分享您的想法.

docker dockerfile

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

EF:"包含"导航属性,在创建具有"选择"投影的包装器对象时

我在我的查询中包含导航属性Include,以便以后不会延迟加载.但是,当我使用Select投影创建一个匿名的包装器对象时,它不起作用.

让我展示一下简化的例子. 实体:

public class UserEntity {
    public string Name {get;set;}
    public virtual ICollection<UserEntity> Friends { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

查询:

var entry = _dbCtx
    .Users
    .Include(x => x.Friends)
    // Select here is simplified, but it shows the wrapping
    .Select(user => new {
        User = user
    })
    .First();

// Here we have additional lazy loaded DB call
var friends = entry.User.Friends.Select(x => x.Name).ToList();
Run Code Online (Sandbox Code Playgroud)

我也从生成的SQL中看到,导航属性不包括在内:

SELECT 
    [Limit1].[Name] AS [Name], 
    FROM ( SELECT TOP (1) 
        [Extent1].[Name] …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework linq-to-sql entity-framework-6

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

Google Apps脚本中未处理的例外情况

我创建了一个公共Web应用程序,可以访问我的私人电子表格数据.我可以捕获并记录异常try..catch,但是:

  1. 是否可以捕获所有未处理的异常,如浏览器window.onerror
  2. 我可以在某处查看未处理的异常日志吗?
  3. 通过诸如"服务调用太多次"之类的例外我的应用程序甚至没有运行,所以在这里我绝对不能处理异常.是否有这种例外的日志?

这些都是如此简单的问题,所以我很困惑地问他们,但经过几个小时的研究后我找不到答案.

先感谢您.

javascript exception-handling google-sheets google-apps-script

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

具有精确A4横向尺寸的空体元素打印在2页上

演示:

print()
Run Code Online (Sandbox Code Playgroud)
@page {
    size: A4 landscape;
    margin: 0;
}
html, body {
    margin: 0;                
}
html {
    background: cyan;
}
body {
    width: 297mm;
    height: 210mm;                
    background: red;
}
Run Code Online (Sandbox Code Playgroud)

尺寸A4 landscape是正确的,但打印溢出到第二页.这些发生在Win 10 Chrome 63,FF 52和Edge 41中.

在此输入图像描述

当我使用纵向尺寸并打印A4纵向时,只能按预期打印一页,没有任何溢出.

有没有人有这个问题的线索?它是否出现在每个平台上?

先感谢您

html css printing

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

NPM 发布/包不包含 Windows 上符号链接目录的内容

NPM 不遵循目录符号链接,也不遵循目录连接。是否有某种配置或方法可以强制 NPM 也包含此类目录中的文件?

\n

最小的可重现示例。文件夹结构:

\n
hello/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foo/\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foo.js\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bar/\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bar.js\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foo/ (SYMLINK)\n\n
Run Code Online (Sandbox Code Playgroud)\n

有两种类型的符号链接不起作用:

\n
hello/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foo/\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foo.js\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bar/\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bar.js\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 foo/ (SYMLINK)\n\n
Run Code Online (Sandbox Code Playgroud)\n
bar> mklink /J foo ..\\foo\n
Run Code Online (Sandbox Code Playgroud)\n

打包命令

\n
bar> mklink /D foo ..\\foo\n
Run Code Online (Sandbox Code Playgroud)\n

foo/foo.js生成没有文件夹的tar 包foo/

\n
bar> npm pack\n
Run Code Online (Sandbox Code Playgroud)\n

npm npm-publish

5
推荐指数
0
解决办法
278
查看次数

具有多个存储库的单个自定义子域的 Github 页面(使用路径)

我有多个 Github 存储库。所有这些gh-pages都已启用,并且可以通过路径访问存储库,例如:

  • username.github.io/repository1,
  • username.github.io/repository2,
  • ...

现在我正在尝试创建一个自定义子域docs.foo.tld并让我的所有存储库都gh-pages可以通过

  • docs.foo.tld/repository1
  • docs.foo.tld/repository2
  • ...

我已经创建了一个CNAME条目docs.foo.tldusername.github.io

但是当我在 github 上的存储库设置docs.foo.tld中添加此自定义域 ( )时repository1gh-pages可以通过 直接访问docs.foo.tld,而不是通过docs.foo.tld/repository1

/repository1当对所有这些存储库使用相同的自定义子域时,我如何在路径段中使用/repository2所有这些存储库。

另请注意,当我尝试将此自定义子域添加到 时repository2,我收到异常,因为CNAME已被采用。

github github-pages

4
推荐指数
2
解决办法
1203
查看次数

checkValidity 函数未检测到“tel”类型的无效输入

我正在尝试使用这样的 checkValidity 函数验证表单的输入

    let inputs = document.getElementsByTagName('input');
    inputs = Object.values(inputs);
    let textarea = document.getElementsByTagName('textarea');
    textarea = Object.values(textarea);
    inputs.push(textarea[0]);
    
    for(let i=0;i<inputs.length;i++){
    	inputs[i].addEventListener('keyup', function(){
    
    for(let i = 0;i<inputs.length;i++){
        inputs[i].addEventListener('change', function(){
          if($(inputs)[i].checkValidity()){
          $(inputs)[i].classList.remove('inputInvalid');
          $(inputs)[i].classList.add('inputValid');
        }else{
          $(inputs)[i].classList.remove('inputValid');
          $(inputs)[i].classList.add('inputInvalid');
        }
        })
      }
    
      });
    }
Run Code Online (Sandbox Code Playgroud)
input.inputValid, textarea.inputValid{
  border-color:green;
}
input.inputInvalid, textarea.inputInvalid{
  border-color:red;
}

div{
  margin:10px 
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
  <span>Name*</span>
    <input required type="text" size="40" class="text"/>
  </div>
  <div>
  <span>Company Name</span>
    <input type="text" size="40" class="text" />
  </div>
  <div>
    <span>Telephone*</span>
    <input required type="tel"  size="40" class="text" />
  </div>
  <div>
  <span>e-mail*</span> …
Run Code Online (Sandbox Code Playgroud)

html javascript forms validation jquery

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