打字稿:严格检查 "Any"

Typescript: Strict Checks Against "Any"

我的 Typescript 配置允许编译以下代码:

const thing : any = 123
const name : string = thing

显然,name 实际上不是 string,但我将其声明为 any 的事实使我的类型检查器忽略了它。


如何配置我的 tsconfig.json 给我一个错误,直到我为我的对象提供正确的类型

我目前的配置:

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es6",
        "noEmitOnError": true,
        "noImplicitAny": true,
        "noImplicitReturns": true,
        "noUnusedLocals": true,
        "noUnusedParameters": true,
        "strictNullChecks": true,
        "moduleResolution": "node",
        "sourceMap": true,
        "outDir": "dist",
        "baseUrl": ".",
        "paths": {
            "*": [
                "node_modules/*",
                "src/types/*"
            ]
        }
    },
    "include": [
        "src/**/*.ts"

    ]
}

but the fact that I declare it as any makes my typechecker ignore it.

这是设计使然。通过说它 any 明确地 要求类型检查器忽略它,这就是它所做的

any 类型在设计上禁用了类型检查器。从 TypeScript 3.0 开始,还有另一种称为 unknown 的类型,它基本上是 any.

的严格版本
const thing: unknown = 123;
const name: string = thing; // <- error TS2322: Type 'unknown' is not assignable to type 'string'.

您可以在 release notes of TypeScript 3.0 中找到更多相关信息。 目前——发布后大约两年——,该类型尚未列为 basic types on the website. However, there is a beta for a new version of the website 之一,其中还列出了 unknown.