【问题标题】:Object is possibly 'undefined' typescript对象可能是“未定义”的打字稿
【发布时间】:2019-09-15 08:35:21
【问题描述】:

我正在尝试从对象访问值。但我收到以下错误。

对象可能是“未定义”的打字稿

我的 TypeScript 代码:

import { SqlClient } from 'msnodesqlv8';

declare var require: any;

const sql: SqlClient = require('msnodesqlv8');

const connectionString =
  'server=.,1433;Database=emps;Trusted_Connection=Yes;Driver={SQL Server Native Client 11.0}';
const query = 'SELECT * FROM [dbo].[sample] WHERE id = 117';

sql.query(connectionString, query, (err, rows) => {
  console.log(rows);   // this works fine, but when i try to access its value using object key, it fails
  console.log(rows[0].Id);  // this fails
});

这在 JavaScript 中运行良好。 TypeScript 的实现方式是什么。

【问题讨论】:

  • 为什么不在日志前检查未定义?
  • 使用if 声明
  • declare var require: any; const sql: SqlClient = require('msnodesqlv8'); 非常错误(仅供参考)。它绝对需要是import sql = require('msnodesqlv8');import sql from 'msnodesqlv8';

标签: javascript typescript


【解决方案1】:

您收到该错误是因为如果 rows 数组不包含任何元素,则 rows[0] 将未定义。两种可能的解决方案:

1) 检查它是否确实有数据,例如

if (rows[0]) {
    console.log(rows[0].Id)
}

2) 禁用tsconfig.json 中的strictstrictNullChecks 选项(查看更多here)。这将使错误静音,但如果它实际上 未定义,您将收到运行时错误,因此您可能需要检查该值,除非您绝对确定它总是有数据。

【讨论】:

  • 降低严格性是一个非常糟糕的主意。如果您需要在特定值上覆盖它,请调整该值的类型。
猜你喜欢
  • 2019-07-30
  • 1970-01-01
  • 2021-01-19
  • 2019-12-24
  • 1970-01-01
  • 2021-08-24
  • 2021-08-06
  • 2021-12-21
  • 1970-01-01
相关资源
最近更新 更多