Javascript 预计typescript tsc将引发错误,但未引发任何错误

Javascript 预计typescript tsc将引发错误,但未引发任何错误,javascript,node.js,typescript,Javascript,Node.js,Typescript,在用于编辑typescript代码的IDE中,checkApp.ts中有一条警告,指出: Argument type { someWrongParams: any } is not assignable to parameter type AddAppToListParams. 但是,当我运行tsc时,不会抛出任何错误。如何在运行tsc时显示错误 tsconfig.json { "compilerOptions": { "allowJs": true, "noEmit": tr

在用于编辑typescript代码的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 });
};
接口CheckAppParams{
appId:字符串;
}
导出默认值(app:any)=>async(requestParams:CheckAppParams):Promise=>{
const{appId}=requestParams;
wait app.tasks.addAppToList({someErrorParams:appId});
};
addAppToList.ts

interface AddAppToListParams {
    appId: string;
}

export default (app: any) => async (requestParams: AddAppToListParams): Promise<any> => {
    const { appId } = requestParams;
    app.list.push(appId);
};
接口AddAppToListParams{
appId:字符串;
}
导出默认值(app:any)=>async(requestParams:AddAppToListParams):Promise=>{
const{appId}=requestParams;
app.list.push(appId);
};
tasks.ts

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

export default (app: any) => async (): Promise<any> => {
    app.tasks = {
        addAppToList: addAppToList(app),
        checkApp: checkApp(app),
    };
};
从“./checkApp”导入checkApp;
从“/addAppToList”导入addAppToList;
导出默认值(app:any)=>async():Promise=>{
app.tasks={
addAppToList:addAppToList(应用程序),
checkApp:checkApp(应用程序),
};
};

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

checkApp.ts
中,将导出函数的参数显式定义为
(app:any)
。因此,在函数内部,
app.tasks
也是类型
any
app.tasks.addAppToList
也是类型
any
,编译器将允许您对其执行任何操作。当您执行
app.tasks.addAppToList({someErrorParams:appId})时,编译器没有理由给出错误


至于IDE标记错误的原因,问题中没有足够的信息来解释。也许您修改了粘贴到这里的代码,但没有保留关键信息。可能您的IDE操作的文件与您传递给编译器的文件不同。(我想说的是,我从来没有遇到过这种情况,但有时在大型重构中,我会分心,失去对情节的跟踪,并设法让我的思路有点交叉。)事实上,您显示的错误消息确实暗示了您的IDE正在使用的代码与您在问题中显示的代码之间的差异。问题中的代码正在传递类型为:
{someErrorParams:string}
的参数,但是来自IDE的错误消息抱怨类型为
{someErrorParams:any}

的参数,如果您希望tsc抛出错误,您可以将
app
定义为
接口
,并引用它,而不是
any
,否则,typescript编译器将不知道它是什么

将应用程序定义为接口将允许编译器识别错误:

export interface App {
  tasks: {
    addAppToList: (requestParams: AddAppToListParams) => Promise<any>;
    checkApp: (requestParams: CheckAppParams) => Promise<any>;
  };
  list: any; // you can make it whatever it needs to be.
}

有很多可能解释为什么会发生这种情况。也许您的ide编译器设置与构建时不同,也许它们使用的版本不同。很难说没有更多的信息,比如代码、tsconfig以及您添加tsconfig.json的实际构建方式。。IDE(Intellij)只显示了一个警告,而不是一个错误。我怀疑我需要添加一些配置来将警告更改为一个错误。添加tsconfig后tsc仍然没有显示任何错误?如果您要添加实际的代码也会很有帮助…是的,在添加tsconfig之后,它仍然只在IDE中显示警告,但在运行tsc时不会抛出错误。。添加了代码
  "scripts": {
    "prebuild": "do your lint checks here with can throw errors if you want",
    "build": "tsc"
  },