Typescript不会从array.prototype.find推断undefined为返回类型

时间:2019-12-25 14:07:51

标签: typescript

我有一个使用打字稿3.7.2的项目,每次在数组vs代码上使用“ find”方法时,不会将“ undefined”显示为可能的返回类型。

interface Repository<T, TID> {
  get: (id: TID) => T | undefined;
}

class CustomerRepository implements Repository<Customer, string> {
  private customers: Customer[];

  constructor() {
    this.customers = [
    {
      id: "ID1",
      name: "Generic Customer 1",
      age: 30
    },
    {
      id: "ID2",
      name: "Generic Customer 2",
      age: 40
    },
    {
      id: "ID3",
      name: "Generic Customer 3",
      age: 50
    }
  ]
  }

  get(id: string): Customer | undefined {
    return this.customers.find(customer => customer.id === id);
  }
}

我在存储库上调用“ get”方法还是在存储库内调用“ this.customers.find”都没关系,它仍然不会显示“ undefined”作为可能的返回类型。 这段代码将在运行后立即编译然后崩溃:

const customer = customerRepo.get("ID4");
console.log(customer.id);

这是我的tsconfig.json文件:

{
"compilerOptions": {
    "target": "es5",
    "module": "es6",
    "allowJs": true,
    "sourceMap": true,
    "outDir": "./dist",
    "lib": ["dom", "es6", "dom.iterable", "scripthost"],
    "noImplicitAny": true
},
"exclude": [
    "./node_modules/**/*",
    "definitions"
]
}

1 个答案:

答案 0 :(得分:1)

除非在undefined中指定了null选项,否则

strictNullCheckstsconfig被联合中的其他类型吸收。有关所有选项,请参见docs

如果添加选项undefined将出现在返回类型中。