鉴于此代码,我希望TypeScript编译器失败:
function test(f: string) {
console.log(typeof f);
}
const foo: any = ["Test"];
test(foo);
const boo = "test";
test(boo);
输出为:
object
string
由于我不是TypeScript专家,因此我很想在GitHub上编写错误。人们怎么看?
答案 0 :(得分:2)
the any
type的重点是针对代码的某些部分选择不进行类型检查。这是故意不健全的;所有类型均可分配给any
,而never
可分配给所有类型(any
除外)。这既有用又危险。之所以有用,是因为有时会繁琐,困难或不可能正确键入一段有效的真实代码,并且any
是一个逃生舱门。这是危险的,因为编译器无法区分使用any
输入的 valid 代码和使用any
输入的 invalid 代码之间的区别。因此,通常test(foo)
的建议是“谨慎使用”。
如果您由于不信任他人或自己不编写上面的any
之类的代码而没有找到足够的建议,那么在完全放弃TypeScript之前,您可能至少要探索一种选择:{ {3}}。
linting和TSLint都可以配置为不允许将值注释为类型// TSLint
const foo: any = ["Test"];
// -----> ~~~~
// ERROR: no-any Type declaration of 'any' loses type-safety.
// Consider replacing it with a more precise type.
。 TSLint的规则称为TypeScript ESLint,而TypeScript ESLint的规则称为no-any
。这将导致您得到如下错误:
// TypeScript ESLint
const foo: any = ["Test"];
// -----> ~~~~
// warning Unexpected any. Specify a different type
// @typescript-eslint/no-explicit-any
或可能
19/12/12 12:49:01 WARN scheduler.TaskSetManager: Lost task 0.0 in stage 893.0 (TID 14716, slave03, executor 6): org.apache.spark.util.TaskCompletionListenerException: refCnt: 0, decrement: 1
at org.apache.spark.TaskContextImpl.markTaskCompleted(TaskContextImpl.scala:105)
at org.apache.spark.scheduler.Task.run(Task.scala:112)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:322)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
好的,希望能有所帮助;祝你好运!