虽然我strict: true
中有tsconfig.json
,但这并非错误:
const a: (b?: string) => string[] =
(c : string) => c.split(',');
^
should scream in vein
如何让TypeScript对此感到恐慌?
包版本:
这是我的完整tsconfig.json
:
{
"compilerOptions": {
"target": "es2015",
"module": "commonjs",
"strict": true,
"noImplicitAny": true,
"allowJs": true,
"sourceMap": true,
"allowSyntheticDefaultImports": false,
"moduleResolution": "node",
"noUnusedLocals": true,
"noUnusedParameters": false,
"preserveConstEnums": false,
"removeComments": false,
"lib": [
"es5",
"es6",
"dom",
"es2015.core",
"es2015.collection",
"es2015.generator",
"es2015.iterable",
"es2015.promise",
"es2015.proxy",
"es2015.reflect",
"es2015.symbol",
"es2015.symbol.wellknown",
"esnext.asynciterable"
]
},
"exclude": [
"node_modules",
"test",
".git"
]
}
答案 0 :(得分:1)
在您的设置中正在进行一些时髦的事情。我使用TypeScript 2.6.1和您的tsconfig.json
以及代码:
const a: (b?: string) => any = (b: string) => 1;
因为你有strict
标志,包括你需要得到错误的两个标志; strictNullChecks
和strictFunctionTypes
。我跑的时候:
tsc
我收到消息:
app.ts(1,7): error TS2322: Type '(b: string) => number' is not assignable to type '(b?: string | undefined) => any'. Types of parameters 'b' and 'b' are incompatible.
Type 'string | undefined' is not assignable to type 'string'.
Type 'undefined' is not assignable to type 'string'.
你是如何运行编译器的?我问的原因是它只会使用你的配置文件,如果你“运行它”,如上所示。例如,如果传递文件名参数,则不会使用您的配置:
tsc app.ts
没有错误,因为您不再使用tsconfig.json
。