初学ts请问这个问题该怎么改

发布于 2022-09-13 01:00:01 字数 1150 浏览 22 评论 0

 interface IBaseCURD<T> {
    list:Array<T>
    add:(t:T) => T
    getUersId:(id:number) => T
 }

 // 定义一个用户信息的类
 class User {
     id?:number | string //id代表可有可无
     name:string //用户的姓名
     age:number  //用户的年龄

     constructor(name:string,age:number){
         this.name = name;
         this.age = age
     }
 }

 //定义一个类,可以针对用户的信息对象进行增加及查询的操作
 class UserCRUD implements IBaseCURD<User>{
     //用来存多个User类型的用户信息对象
     list:Array<User> =[]

     add(user:User):User {
         user.id =Date.now() +Math.random()
        //将用户信息添加到data中
        this.list.push(user)
         return user
     }
        // 根据id查询用户信息
     getUersId(id:number):User {
         return this.list.find(item => item.id == id)
     }
     
 }

 const userCURD = new UserCRUD();
 userCURD.add(new User('jack',20))
 
 const {id} = userCURD.add(new User('lance',16))

 userCURD.add(new User('tom',18))

 console.log(userCURD.list);

 const user = userCURD.getUersId(id)
 console.log(user);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

岁吢 2022-09-20 01:00:01

类型要兼容。getUserID定义返回值要是User;但是find是有可能找不到的,即find返回的类型含有undefined。同理此方法接受的参数是number,但是你的类型定义中User.id是可选的,也就是id的类型为number|string|undefined。初学还是好好看文档吧,断言可以解决问题,但是不建议

还不是爱你 2022-09-20 01:00:01

大兄弟,你这个id定义的时候?:是没问题的,因为如果是自增的话那么可以为undefined,但是你这里为啥还要定义类型为number|string呢?定义number不就行了吗?我第一次见数据表一个字段会存在两种类型的。
然后你getUserId这里面的参数又是number类型,这不是给自己找不自在吗?

那么你首先你定义数据结构的时候应该就是id?: number就行。然后查询的时候做个判断啊:

if(id != undefined) {
    const user = userCURD.getUersId(id)
    console.log(user);
} else {
    console.log('找不到数据');
}

不就行了吗?有啥好纠结的。

抠脚大汉 2022-09-20 01:00:01

第一个错误,find 的返回的结果是User类型和undefined, 后续你也需要判断结果是否undefined,你可以给getUersId函数添加多一个undefined 类型,

find(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): T | undefined;

function getUersId(id:number): User | undefined {
       return list.find(item => item.id === id)
}

如果getUersId函数undefined时你有默认值,你也可以使用类型保护,类似这样
参考 typescript 文档中 高级类型 中的类型保护和类型断言
https://www.tslang.cn/docs/ha...

function getUersId(id:number): User | undefined {
       return list.find(item => item.id === id) || {name:'a', age:18}
}

你还可以在tsconfig.json 将strictNullChecks设置成false(不建议)

第二个错误,
不知道你为什么设置id存在时为 number | string
如果你的id 存在时为number | string
getUsersId函数应该改成
getUsersId(id:number | string)
还要判断undefined
你可以使用 typeof类型保护 https://www.tslang.cn/docs/ha...

if(typeof id !== 'undefined'){
    getUsersId(id:number | string)
}
池予 2022-09-20 01:00:01

不习惯 严格检查 undefined 的话,建议在 tsconfig.json 中加入

"strictNullChecks": false,

用以取消严格检查

报错的问题,是因为 User 中的 id 是可选的,也就是id: number | undefined,所以下面在使用时,TS 推断那里的 id 可能不存在,所以提示错误

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文