typescript对于各种库的兼容性成熟到什么程度了?

我想要切换到typescript,不过你看这个mongodb 官方文档,连接数据库的用例,都还是js的。
https://mongodb.github.io/nod...

我想要连接一个数据库,复制以上的代码,你要是标红(没有实际测试过,会不会标红)让我去检查类型,那我肯定想死阿。

另外,还有一个很常用的用例,比如node express有一个非常常见的代码。

app.use(cors()),用这个cors插件,我看了官方也没有提供ts代码,我在想是不是这一行代码不需要限制类型阿,如果需要限制类型,那官方咋不给提供个代码用例。

我最早起意过渡到ts是因为,react router的官方用例全是ts写的了,我感觉可能这个东西已经很成熟了,不过你做不到让我直接复制粘贴 连接数据库/使用cors中间件 的代码用例,我还是会怕阿。

阅读 2.6k
4 个回答

现在很多库都采用 TypeScript 开发,或者有自己的类型声明。而且 TypeScript 组织维护了一个类型库,可以通过 npm install @types/xxxxxxx 来安装。

在 NPM 上可以查到 @types/mongodb,不过已经声明过期,因为 mongodb 自身已经提供了类型库。

montodb 可以看到名称旁有一个 TS 标识,说明它是带类型的。

image.png


补充一句,如果还在使用“粘贴”的方式写代码,请参考 Copilot 和 ChatGPT……在不久的将来,不需要用人来粘贴代码了。

你说的“成熟”是不是指“炫我嘴里”?

热门的用js写的库一般会有人维护专门的类型例如 @type/node,你可以在DefinitelyTyped这个库里面找找有没有你需要的类型,里面有1000+个包的类型声明

贴一段我用mongodb的代码

import { Collection, MongoClient, MongoClientOptions } from 'mongodb'
import { BaseInfo, ChatRoom, LogMessage } from './interfaces'
import config from './config'

export interface Collections {
    'chatroom': ChatRoom & BaseInfo;
    'log': LogMessage & BaseInfo;
}
export type CollectionsKey = keyof Collections

export class DBCenter {
    private __client: MongoClient
    private dbName: string
    constructor(uri: string, dbName: string, config: MongoClientOptions) {
        this.__client = new MongoClient(uri, config)
        this.dbName = dbName
    }
    async getCollection <T extends CollectionsKey> (doc: T): Promise<Collection<Collections[T]>> {
        const { __client, dbName } = this
        await __client.connect()
        return __client.db(dbName).collection(doc)
    }
}

export default new DBCenter(config.mongodb.uri, config.mongodb.dbName, config.mongodb.config)

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题