我有以下tsconfig.json
{
"compilerOptions": {
"allowJs": true,
"allowSyntheticDefaultImports": true,
"baseUrl": "src",
"isolatedModules": true,
"jsx": "preserve",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"lib": ["dom", "dom.iterable", "esnext"],
"module": "esnext",
"moduleResolution": "node",
"noEmit": true,
"noImplicitAny": true,
"noUnusedLocals": true,
"resolveJsonModule": true,
"skipLibCheck": true,
"strict": true,
"strictFunctionTypes": true,
"strictNullChecks": true,
"target": "es5",
"types": ["node", "jest"]
},
"include": ["./src/**/*.ts", "./src/**/*.tsx"],
"plugins": [
{
"name": "typescript-tslint-plugin"
}
]
}
我设置了noImplicitAny
,但是打字稿正在推断该对象的类型:
export const routes = [
{
exact: true,
id: "home",
main: {
component: Home,
},
path: "/",
},
{
id: "audit-report",
main: {
component: AuditReport,
},
path: "/reports/audit",
},
];
我希望该对象没有输入会引发错误。
答案 0 :(得分:0)
noImplictAny
仅在未指定类型时触发错误。 AND 类型脚本隐式假定any
,因为它没有有关变量的额外信息。在您未指定类型的情况下,打字稿可以轻松推断出routes
的类型。如果使用不当(例如,访问不存在的属性),则会收到错误消息,因此就编译器而言,这都是类型安全的。
我通常建议让编译器在可能的地方推断类型,显式键入所有内容会增加很多杂音,并且我发现它的价值有限(如果您确实需要知道推断的类型,可以通过悬停查看推断的类型)
如果您真的真的想强制指定所有类型,则可以使用this tslint规则。