Open sakila1012 opened 4 years ago
最近项目中要使用TypeScript,趁着这个机会,把TypeScript学习一把,而且 vue 3.0 也是使用 TypeScript 写的,TypeScript还是要好好准备
var obj: Object = Object.create(null); obj.value = "value";//[ts] Property 'value' does not exist on type'Object'.
这是因为Typescript在执行代码检查时在该对象没有定义相应属性,遇到该报错有以下几种解决方式:
这是是一种非常效率的解决办法,可以访问修改任何属性不会出现编译错误。具体代码如下
var obj: any = Object.create(null); obj.value = "value";
这种方式有些hack的感觉,但是依然能解决编译错误的问题。具体代码如下:
var obj: Object = Object.create(null); obj["value"] = "value";
虽然较为繁琐,但却是最提倡的一种解决方式。通过接口声明对象后,所具有的属性值一目了然。具体代码如下:
var obj: ValueObject = Object.create(null); obj.value = "value"; interface ValueObject { value?: string }
声明断言后,编译器会按断言类型去执行。具体代码如下:
var obj: Object = Object.create(null); (obj as any).value = "value";
参考
写在前面
最近项目中要使用TypeScript,趁着这个机会,把TypeScript学习一把,而且 vue 3.0 也是使用 TypeScript 写的,TypeScript还是要好好准备
使用介绍
TypeScript 错误property does not exist on type Object
这是因为Typescript在执行代码检查时在该对象没有定义相应属性,遇到该报错有以下几种解决方式:
1.将对象类型设置为any
这是是一种非常效率的解决办法,可以访问修改任何属性不会出现编译错误。具体代码如下
2.通过字符方式获取对象属性
这种方式有些hack的感觉,但是依然能解决编译错误的问题。具体代码如下:
3.通过接口定义对象所具有的属性
虽然较为繁琐,但却是最提倡的一种解决方式。通过接口声明对象后,所具有的属性值一目了然。具体代码如下:
4.使用断言强制执行
声明断言后,编译器会按断言类型去执行。具体代码如下:
参考