我总是使用标志--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?
在angularjs中你有标签ng-src,其目的是在angularjs评估位于{{和之间的变量之前,你不会收到无效网址的错误}}.
问题是我使用了一些DIV,并background-image设置了一个url.我这样做是因为优秀的CSS3属性background-size可以将图像裁剪为DIV的精确尺寸.
唯一的问题是我收到很多错误的原因与创建ng-src标签的原因完全相同:我在url中有一些变量,浏览器认为图像不存在.
我意识到有可能写出原油{{"style='background-image:url(myVariableUrl)'"}},但这看起来很"脏".
我搜索了很多,找不到正确的方法来做到这一点.由于所有这些错误,我的应用程序变得一团糟.
我在我的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调用相同的事实有关.那么如何向每个不同的包含发送不同的变量呢?
我有一个在Heroku上运行的应用程序.这个应用程序安装了Postgres 9.2.4(Dev)插件.要访问我的在线数据库,我使用Navicat Postgres.有时Navicat不会干净地关闭它与Postgres数据库建立的连接.结果是,经过一段时间后,Postgres数据库有20多个开放连接.我的Postgres安装只允许20个同时连接.因此,通过20多个开放式连接,我的Postgress数据库现在无法访问(连接太多).
我知道这是Navicat的一个问题,我试图在这方面解决这个问题.但如果它发生(连接太多),我该如何解决这个问题(例如关闭所有连接).
我已经尝试了以下所有事情,没有结果.
heroku restart)我认为Postgres方面显然存在一些"死"的联系.但是如何关闭它们呢?
我有几个我想用脚本编译的文件.这些文件依赖于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 提供选项,我会收到以下错误: …
我经常发现自己处于我想要的情况,在单个(原子)操作中,将一个项添加到数组并返回该新数组.
['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()上面的方法),但我正在寻找一个直观的简单代码,它不会"误用"其他运算符
angularjs ×2
typescript ×2
arrays ×1
css ×1
ecmascript-5 ×1
heroku ×1
javascript ×1
lodash ×1
postgresql ×1