类型“false”没有呼叫签名。 (tsserver 2349)

问题描述 投票:0回答:1

我收到以下 Typescript 警告:

let d: { [key: string]: { [k: string]: boolean } | number[] } = {
  blah: [],
};
d["blah"].push(2);

警告:

 This expression is not callable.                                               
 Not all constituents of type 'boolean | ((...items: number[]) => number)'    
 are callable.                                                                  
 Type 'false' has no call signatures. (tsserver 2349)  

代码有效,如果我 console.log(d['blah']) 我得到

[2]
。为什么我会收到警告?我该如何纠正它(或忽略它)?

我的 tsconfig:

{
  "compilerOptions": {
    "target": "es2015",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "strict": true,
    "noEmit": true,
    "esModuleInterop": true,
    "module": "esnext",
    "moduleResolution": "bundler",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "preserve",
    "incremental": true,
    "plugins": [
      {
        "name": "next"
      }
    ],
    "paths": {
      "@/*": ["./*"]
    }
  },
  "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
  "exclude": ["node_modules"]
}

我尝试打印到控制台并且代码可以工作,所以我很困惑为什么会出现警告(如果它有效的话)

javascript arrays typescript
1个回答
0
投票

根据您定义的打字稿接口

key
可以是数字数组或对象。

所以你应该首先检查

d['blah']
是否是一个数组,然后推送值

interface IObjectType {
  [key: string]: {
    [k: string]: boolean
  } | number[]
}


let d: IObjectType = {
  blah: [],
};
if (Array.isArray(d['blah'])) {
  d["blah"].push(2);
}
© www.soinside.com 2019 - 2024. All rights reserved.