小编Jas*_*lte的帖子

在编译带有noImplicitAny标志的typescript时,如何防止错误"对象类型的索引签名隐式具有'任何'类型"?

我总是使用标志--noImplicitAny编译Typescript.这是有道理的,因为我希望我的类型检查尽可能紧.

我的问题是,使用以下代码我得到错误Index signature of object type implicitly has an 'any' type:

interface ISomeObject {
    firstKey:   string;
    secondKey:  string;
    thirdKey:   string;
}

let someObject: ISomeObject = {
    firstKey:   'firstValue',
    secondKey:  'secondValue',
    thirdKey:   'thirdValue'
};

let key: string = 'secondKey';

let secondValue: string = someObject[key];
Run Code Online (Sandbox Code Playgroud)

需要注意的重要一点是,关键变量来自应用程序中的其他位置,可以是对象中的任何键.

我试过通过以下方式明确地转换类型:

let secondValue: string = <string>someObject[key];
Run Code Online (Sandbox Code Playgroud)

或者我的情景是不可能的--noImplicitAny?

typescript

285
推荐指数
11
解决办法
16万
查看次数

angularjs:ng-src等效于background-image:url(...)

在angularjs中你有标签ng-src,其目的是在angularjs评估位于{{和之间的变量之前,你不会收到无效网址的错误}}.

问题是我使用了一些DIV,并background-image设置了一个url.我这样做是因为优秀的CSS3属性background-size可以将图像裁剪为DIV的精确尺寸.

唯一的问题是我收到很多错误的原因与创建ng-src标签的原因完全相同:我在url中有一些变量,浏览器认为图像不存在.

我意识到有可能写出原油{{"style='background-image:url(myVariableUrl)'"}},但这看起来很"脏".

我搜索了很多,找不到正确的方法来做到这一点.由于所有这些错误,我的应用程序变得一团糟.

css angularjs

149
推荐指数
6
解决办法
12万
查看次数

不同的ng-include在同一页面上:如何向每个变量发送不同的变量?

我在我的AngularJS应用程序中有一个页面,其中我想包含相同的html部分,但具有不同的变量.如果我在我的主要部分执行此操作html:

<div id="div1" ng-include src="partials/toBeIncluded.html onload="var='A'">
<div id="div2" ng-include src="partials/toBeIncluded.html onload="var='B'">
Run Code Online (Sandbox Code Playgroud)

而toBeIncluded.html看起来像

<div>{{var}}</div>
Run Code Online (Sandbox Code Playgroud)

两者div都会看起来像

<div id="div1"><div>B</div></div>
<div id="div2"><div>B</div></div>
Run Code Online (Sandbox Code Playgroud)

我想这与onload为ng-includes调用相同的事实有关.那么如何向每个不同的包含发送不同的变量呢?

angularjs

41
推荐指数
4
解决办法
5万
查看次数

Heroku Postgres:连接太多了.我如何杀死这些连接?

我有一个在Heroku上运行的应用程序.这个应用程序安装了Postgres 9.2.4(Dev)插件.要访问我的在线数据库,我使用Navicat Postgres.有时Navicat不会干净地关闭它与Postgres数据库建立的连接.结果是,经过一段时间后,Postgres数据库有20多个开放连接.我的Postgres安装只允许20个同时连接.因此,通过20多个开放式连接,我的Postgress数据库现在无法访问(连接太多).

我知道这是Navicat的一个问题,我试图在这方面解决这个问题.但如果它发生(连接太多),我该如何解决这个问题(例如关闭所有连接).

我已经尝试了以下所有事情,没有结果.

  • 关闭Navicat并重启我的电脑(OS X 10.9)
  • 重启我的Heroku应用程序(heroku restart)
  • 试图重新启动在线数据库,但我发现没有选择这样做
  • 手动关闭从OS X到Postgres服务器IP的所有连接
  • 重启我们的路由器

我认为Postgres方面显然存在一些"死"的联系.但是如何关闭它们呢?

postgresql heroku

32
推荐指数
5
解决办法
3万
查看次数

如何使用path编译器选项使用tsc编译特定文件

我有几个我想用脚本编译的文件.这些文件依赖于paths编译选项来解析其模块.因为我想特别针对这些文件,所以我必须提供它们tsc(因为我不想tsconfig.json为这个任务创建一个单独的目标文件)

我已经查看了将--path参数传递给的选项tsc,但是这是不允许的(error TS6064: Option 'paths' can only be specified in 'tsconfig.json' file.)

.ts在使用该paths选项时,我能以某种方式仅编译特定文件吗?

更新(22-06-17)

根据要求,一些具体的例子:

tsconfig.json文件中的相关设置如下:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "Components/*": [
        "./src/Components/*"
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

所以相关部分是路径设置,您可以在其中创建缩写以从某个目录导入文件.所以你可以import {header} from 'Components/header.ts'代替导入一个文件import {header} from '../../Components/header.ts'

但我需要从命令行编译特定的文件.但如果我尝试:

tsc --project tsconfig.json entryFile.ts
Run Code Online (Sandbox Code Playgroud)

它会给我错误:

error TS5042: Option 'project' cannot be mixed with source files on a command line.
Run Code Online (Sandbox Code Playgroud)

如果我尝试为pathscli 提供选项,我会收到以下错误: …

typescript

16
推荐指数
4
解决办法
1万
查看次数

在ES5 Javascript中,如何在不使用concat的情况下将项添加到数组并立即返回新数组?

我经常发现自己处于我想要的情况,在单个(原子)操作中,将一个项添加到数组并返回该新数组.

['a', 'b'].push('c');
Run Code Online (Sandbox Code Playgroud)

将无法正常工作,因为它返回新的长度.

我知道以下代码有效

['a', 'b'].concat(['c']);
Run Code Online (Sandbox Code Playgroud)

但我发现它是丑陋的代码(组合两个数组只是为了在第一个数组的末尾添加一个项目).

我无法使用Array.splice()它,因为它修改原始数组(并返回已删除的项目).Array.slice()确实返回浅拷贝,但您无法添加新项目.

ES6

我知道es6你可以使用

[...['a', 'b'], 'c']
Run Code Online (Sandbox Code Playgroud)

但我正在寻找es5解决方案

Lodash

我没关系 lodash

只是为了清楚

我知道这可以通过几种不同的方式实现(比如Array.concat()上面的方法),但我正在寻找一个直观的简单代码,它不会"误用"其他运算符

javascript arrays ecmascript-5 lodash

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