定义为object,无法添加新属性报错问题
- ts中,obj[ke]报错解决
在类型 "{}" 上找不到具有类型为 "string" 的参数的索引签名:
interface ObjMap {
[key: string]: string | undefined
}
getStrUrl(objData: ObjMap) {
let str = ""
for (let key in objData) {
str = `${str}${key}=${objData[key]}&`
}
str = str.substring(0, str.length - 1);
return str
}
data中定义变量值的类型,但接口返回值已定义格式,报错问题
- 小程序中如果返回数据已经定义过格式,但是页面中没有,则需要断言页面的参数,断言如下:
data: {
villageList: [] as Village[]
}
interface List {
name: string
}
let data = {
list: [] as Array<List>
}
data.list.push({
name: 'Lucy'
})
错误如下:不能将类型“Village[]”分配给类型“never[]”
想在全局的this加一个参数
- 方法一: 使用 as 断言 this为any
computed:{
codeMsg(){
//这里this类型为CreateComponentPublicInstance,所以没有属性code
return (this as any).code==200 ? 'ok' : 'err';
}
}
- 方法二: 使用定义新的类型赋给this
// 定义类型
interface DataType {
date:string,
author : string,
code : number,
}
computed:{
// 定义this的类型
codeMsg(this:DataType|){
return this.code==200 ? 'ok' : 'err';
}
}
TS引入js文件
- 报错提示:“无法写入文件XXX,因为它会覆盖输入文件”
- 解决方案,如下:
- 1.(推荐)那就直接 const xx:any = require('package') 当js来写,弹警告就屏蔽警告;
- 2.或者自己写声明文件xxx.d.ts(仅限目标模块是自己写的情况,xxx必须和目标文件同名)
- 3.没有types不能import, 也就是ts不能用import引入js模块;
promise 简单命名方式
- 报错内容:类型“void”上不存在属性“then”。
getCropperImage(opt?: object): Promise<any>