Typescript:严格模式下可能的未定义访问警告

时间:2018-04-18 19:59:55

标签: typescript

我在"strict": true中使用带有tsconfig.json的Typescript。不幸的是,如果我这样做,我不会收到警告:

let x: any = { test: false }
let y = x.asdf   // this is undefined, but I don't get a warning

这段代码实际上还是可以的,但是这个代码崩溃了:

let x: any = { test: false }
let y = x.asdf.jjj   // TypeError: Cannot read property 'jjj' of undefined

如果财产可能未定义,是否有可能显示警告?我希望得到警告,以便我可以先查看该属性是否存在。

顺便说一句,配置有效,因为

let x = notDeclared 

表示无法找到notDeclared

我需要这个吗?

更新

根据所有评论(感谢它),我必须更加具体。上面的代码只是一个例子,但在这些情况下我有这个问题,我真的不知道x - 对象中的内容。例如:

let x = JSON.parse(...)    // the result is any

然后我不能说,解析对象中有什么。我可以访问任何内容,而x.asdf只是undefinedx.asdf.jjj会使整个应用程序崩溃。如果是短绒或某事,会很好的。像这样会警告我,如果我太傻了,不能看到这个问题;)

1 个答案:

答案 0 :(得分:0)

  

不幸的是,如果我这样做,我不会收到警告

因为您使用了any类型注释。 any本质上可以切换许多编译时间检查,并且是开发人员告诉TypeScript编译器的方式我知道更好...不要为我检查

修复

删除any注释:

let x = { test: false }
let y = x.asdf   // ERROR

或使用正确的注释:

let x:{ test: boolean } = { test: false }
let y = x.asdf   // ERROR

回答更新

  

我真的不知道x-object中的内容

TypeScript也不是。 TypeScript只能真正防止编译时类型错误。您需要能够预先定义类型,以便让TypeScript检查它。