Javascript 类型脚本理解不可赋值参数

Javascript 类型脚本理解不可赋值参数,javascript,typescript,Javascript,Typescript,假设我有以下几点 const client: Client | boolean = await db.connect() if (client === false) { return } await start(client) db.connect在连接成功或连接失败时返回客户端 start仅接受客户端作为参数: const start = async (dbClient: Client): Promise<void> => { 这在这里更有意义吗?因为您知道它只能是

假设我有以下几点

const client: Client | boolean = await db.connect()
if (client === false) {
  return
}

await start(client)
db.connect在连接成功或连接失败时返回客户端

start仅接受客户端作为参数:

const start = async (dbClient: Client): Promise<void> => {

这在这里更有意义吗?

因为您知道它只能是Client或false,所以您可以将其编码为Client | false类型。然后,TypeScript足够聪明,可以计算出,如果排除false,剩下的就是客户端

类型ClientResult=Client | false; const client:ClientResult=await db.connect 如果客户端===false{ 回来 } 等待新客户
因为您知道它只能是Client或false,所以可以将其编码为Client | false类型。然后,TypeScript足够聪明,可以计算出,如果排除false,剩下的就是客户端

类型ClientResult=Client | false; const client:ClientResult=await db.connect 如果客户端===false{ 回来 } 等待新客户
无论是否声明connect,这对我都适用:


您使用的是什么版本的TypeScript?

这对我来说很有用,无论是否有连接声明:


您使用的是什么版本的TypeScript?

我试过了,但得到的结果是,不能使用类型ClientResult=Client | false const Client:ClientResult=await db将类型“boolean | Client”分配给类型“ClientResult”。connect@CarlMarkham,db.connect函数的声明是什么?如果我从connect方法中删除了返回类型,您的解决方案就可以工作了。所以不是异步连接:承诺{我现在有异步连接{我试过了,但是我得到类型'boolean | Client'不能通过类型ClientResult=Client | false const Client:ClientResult=await db分配给类型'ClientResult'。connect@CarlMarkham,db.connect函数的声明是什么?如果我从connect方法中删除返回类型,您的解决方案将正常工作。因此,与异步连接不同的是:Promise{我现在有异步连接{如果你想进入复杂对象路径,请看一看。免责声明:我自己编写该包是为了在我参与的项目中实施空安全性。如果你想进入复杂对象路径,请看一看。免责声明:我自己编写该包是为了在我参与的项目中实施空安全性。
{
  connected: boolean,
  client: client,
}
interface Client {
    name: string
}

type ClientResult = Client | false

async function main() {
   const client: ClientResult = await connect(Math.random() > 0.5)
   if (client === false) {
      return
   }

    await start(client)
}

async function start(client: Client) {}

async function connect(i?) {
   return i ? { name: 'John' } : false
}