我正在尝试迭代打字稿地图,但我一直收到错误,我找不到任何解决方案,因为这样一个微不足道的问题.
我的代码是:
myMap : Map<string, boolean>;
for(let key of myMap.keys()) {
console.log(key);
}
Run Code Online (Sandbox Code Playgroud)
我得到错误:
类型'IterableIteratorShim <[string,boolean]>'不是数组类型或字符串类型.
完整堆栈跟踪:
错误:Typescript发现以下错误:/home/project/tmp/broccoli_type_script_compiler-input_base_path-q4GtzHgb.tmp/0/src/app/project/project-data.service.ts(21,20):输入'IterableIteratorShim <[string ,boolean]>'不是数组类型或字符串类型.在BroccoliTypeScriptCompiler._doIncrementalBuild(/home/project/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:115:19)BroccoliTypeScriptCompiler.build(/ home/project/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:43:10)在/home/project/node_modules/broccoli-caching-writer/index.js:152:21在lib $ rsvp $$ internal $$ tryCatch(/ home/project/node_modules/rsvp) /dist/rsvp.js:1036:16)lib $ rsvp $$内部$$ invokeCallback(/home/project/node_modules/rsvp/dist/rsvp.js:1048:17)在lib $ rsvp $$ internal $$发布(/home/project/node_modules/rsvp/dist/rsvp.js:1019:11)在lib $ rsvp $ asap $$ flush(/home/project/node_modules/rsvp/dist/rsvp.js:1198:9) at_combinedTickCallback(internal/process/next_tick.js:67:7)at process._tickCallback(internal/process/next_tick.js:98:9)
我正在使用angular-cli beta5和typescript 1.8.10,我的目标是es5.有没有人有这个问题?
是不是可以将参数类型设置为枚举?像这样:
private getRandomElementOfEnum(e : enum):string{
var length:number = Object.keys(e).length;
return e[Math.floor((Math.random() * length)+1)];
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做,Intellij会将此代码标记为未知.并建议重命名变量,这有意义吗?
private getRandomElementOfEnum(e : any):string{
var length:number = Object.keys(e).length;
return e[Math.floor((Math.random() * length)+1)];
}
Run Code Online (Sandbox Code Playgroud)
本规范运作正常.但不像优雅和代码方便.
是否有可能或稍微解决方法将枚举定义为参数?
编辑:
在研究了这些答案之后,我是否可以使用一组定义的枚举来做到这一点,类似于enum1 | enum2 | enum3?
下面的代码让我通过gulp这个错误转发它:
[tsc]> C:/Workarea/MyFirstAngular/src/enum/msg.ts(35,33):错误TS2349:无法调用类型缺少调用签名的表达式.无法编译TypeScript:错误:tsc命令已退出,代码为:2
module MessageUtil {
enum Morning {
"Good Morning",
"Great to see you!",
"Good day.",
"Lovely day today, isn't it?",
"What's up?",
"Nice to meet you",
}
}
export class MessageData {
private getRandomElementOfEnum(e : any):string{
var length:number = Object.keys(e).length(); //<-- This is Line 35
return e[Math.floor((Math.random() * length)+1)];
}
public getRandMorning():string {
return this.getRandomElementOfEnum(Morning);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有谁知道我的确切错误是什么?
我的设置:-IDEA 14 -Node.js -Gulp -gulp-tsc -gulp-connect(用于Livereload)
我有一个这样的表格:
<form action="http://localhost/test">
<input type="text" name="keywords">
<input type="submit" value="Search">
</form>
Run Code Online (Sandbox Code Playgroud)
如果我输入一个值,让我们说:在文本输入字段中输入'hello'并提交表单,URL如下:http://localhost/test/?keywords=hello.
我希望将值附加到操作路径.所以基本上,在表单提交后,URL应如下所示:
http://localhost/test/hello
Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用TypeScript处理一个新项目.我来自另一个也使用TypeScript的项目.由于TypeScript中的循环原生可用,我们决定(旧项目团队)使用这个.对我来说,相信我的java背景,编写for循环更方便.
现在,在新项目中,他们使用_.foreach()循环来迭代数组.
我想知道的是,和_.foreach()的原生打字稿之间是否有性能差异?
我在jsperf中创建了一个小测试,他们缝合的速度或多或少完全相同......
https://jsperf.com/foreach-vs-forof/12
TypeScript For
for (let num: string of list){
console.log(num);
}
Run Code Online (Sandbox Code Playgroud)
在JavaScript中
var list = "9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9".split();
//Transpiled TypeScript for of | **19,937 ±5.04%
for (var _i = 0, list_1 = list; _i < list_1.length; _i++) {
var num = list_1[_i];
console.log("" + num);
}
//lodash | 20,520 ±1.22%
_.forEach(list, function(item) {
console.log("" + item)
});
Run Code Online (Sandbox Code Playgroud)
Imho我更喜欢TypeScript的"原生",因为它对我来说更具可读性.
你们建议使用什么?还有其他要点用于或更好的_.forEach
有一些问题使用css3动画比例,不透明度和其他东西工作,但似乎无法使规模工作.
片段:
#treeLeaves {
background: url(https://i.pinimg.com/originals/72/c0/8e/72c08eefa235ae1c8aa72caa71eeba39.jpg);
background-repeat:no-repeat;
width:100%;
height:375px;
z-index:5;
position:absolute;
bottom:140px;
left:0px;
}
@keyframe leaves {
0% {
transform: scale(1.0);
-webkit-transform: scale(1.0);
}
100% {
transform: scale(2.0);
-webkit-transform: scale(2.0);
}
}
#treeLeaves {
animation: leaves 5s ease-in-out infinite alternate;
-webkit-animation: leaves 5s ease-in-out infinite alternate;
}Run Code Online (Sandbox Code Playgroud)
<div id="treeLeaves"></div>
<div class="leaves">Run Code Online (Sandbox Code Playgroud)
基本上它的1 img,我想随着时间的推移不断扩大和缩小.只使用webkit,因为它只需要在chrome中工作.
谢谢.
当我们在函数中将obj2分配给obj1时,按引用传递不起作用,在函数外部它不起作用并且obj1保留其原始值,但是为什么呢?
let obj1 = {
value: 'a'
}
let obj2 = {
value: 'b'
}
obj3 = obj2;
function change(obj1, obj2) {
obj1 = obj2
obj2.value = 'c'
}
change(obj1, obj2);
console.log(obj1.value)Run Code Online (Sandbox Code Playgroud)
我想将Object []中的String解析为Integer并将其保存在同一个地方,如下所示:
public class ArrParseTest {
public static void main(String[] args) {
Object[] arr = new Object[2];
String input = "Boo;Foo;1000";
Integer somInt = new Integer(0);
arr = input.split(";", -1);
somInt = Integer.parseInt((String) arr[2]);
arr[2] = somInt;
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我总是收到这个例外:
Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer
at main.ArrParseTest.main(ArrParseTest.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我不能简单地将解析后的对象保存到数组中,尽管如此
Object [] arr = new Object [2];
完全用于在Array中存储不同的对象. …
typescript ×4
javascript ×2
arrays ×1
css3 ×1
enums ×1
foreach ×1
forms ×1
html ×1
iterator ×1
java ×1
lodash ×1
maps ×1
parsing ×1
performance ×1
url-routing ×1