宣告没有类型的对象不会被打字稿引发为错误

时间:2019-05-21 07:12:01

标签: typescript

我有以下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",
    },
];

我希望该对象没有输入会引发错误。

1 个答案:

答案 0 :(得分:0)

noImplictAny仅在未指定类型时触发错误。 AND 类型脚本隐式假定any,因为它没有有关变量的额外信息。在您未指定类型的情况下,打字稿可以轻松推断出routes的类型。如果使用不当(例如,访问不存在的属性),则会收到错误消息,因此就编译器而言,这都是类型安全的。

我通常建议让编译器在可能的地方推断类型,显式键入所有内容会增加很多杂音,并且我发现它的价值有限(如果您确实需要知道推断的类型,可以通过悬停查看推断的类型)

如果您真的真的想强制指定所有类型,则可以使用this tslint规则。