首页 > 解决方案 > 期望 typescript tsc 抛出错误,但没有抛出任何错误

问题描述

在用于编辑打字稿代码的 IDE 中,checkApp.ts 中有一条警告,说明:

Argument type { someWrongParams: any } is not assignable to parameter type AddAppToListParams.

但是,当我运行时tsc,不会抛出任何错误。如何在运行时显示错误tsc

tsconfig.json

{
"compilerOptions": {
    "allowJs": true,
    "noEmit": true,
    "pretty": true,
    "strict": true,
    "strictFunctionTypes": true,
    "noImplicitReturns": true,
    "module": "ES6",
    "target": "ES6"
},
"exclude": [
    "node_modules",
    "dist"
],
"include": [
    "./src/**/*"
]}

代码 checkApp.ts

interface CheckAppParams {
    appId: string;
}

export default (app: any) => async (requestParams: CheckAppParams): Promise<any> => {
    const { appId } = requestParams;
    await app.tasks.addAppToList({ someWrongParams: appId });
};

addAppToList.ts

interface AddAppToListParams {
    appId: string;
}

export default (app: any) => async (requestParams: AddAppToListParams): Promise<any> => {
    const { appId } = requestParams;
    app.list.push(appId);
};

任务.ts

import checkApp from './checkApp';
import addAppToList from './addAppToList';

export default (app: any) => async (): Promise<any> => {
    app.tasks = {
        addAppToList: addAppToList(app),
        checkApp: checkApp(app),
    };
};

标签: javascriptnode.jstypescript

解决方案


编译问题中显示的代码tsc时不报告错误是正确的。你的期望是不正确的。

checkApp.ts您将导出函数的参数显式定义为(app: any). 因此,在函数内部,app.tasks也是类型anyapp.tasks.addAppToList也是类型any,编译器会让你对它做任何你想做的事情。当你这样做时,编译器没有理由给出错误app.tasks.addAppToList({ someWrongParams: appId });

至于为什么您的 IDE 标记错误,问题中没有足够的信息来解释这一点。也许您以不保留关键信息的方式修改了粘贴到此处的代码。也许您的 IDE 正在运行的文件与您传递给编译器的文件不同。(我想说它从来没有发生在我身上,但有时在大型重构中,我会分心,失去对情节的追踪,并设法让我的电线交叉了一点。)实际上,你显示的错误消息确实暗示您的 IDE 正在使用的代码与您在问题中显示的代码之间的区别。问题中的代码传递了一个类型的参数:{ someWrongParams: string }但是来自 IDE 的错误消息抱怨一个类型的参数{ someWrongParams: any }


推荐阅读