说我有以下内容
const client: Client | boolean = await db.connect()
if (client === false) {
return
}
await start(client)
db.connect()
返回客户端(连接成功时)或返回错误(连接失败)。
start
仅接受Client
作为参数:
const start = async (dbClient: Client): Promise<void> => {
您可能会看到,await start(client)
出现错误:
类型为true的参数|无法分配客户端以键入客户端
我可以通过在Client | boolean
中指定start
的类型来解决此问题,并且可以放心,它永远不会为假,因为它在调用start
之前就返回了,并且永远不会是true
,因为connect
永远不会返回true,但这会闻到(并可能导致进一步的问题)。
这种事情的最佳方法是什么?
我不仅可以从Client
返回connect
,还可以返回一个对象
{
connected: boolean,
client: client,
}
在这里更有意义吗?
答案 0 :(得分:3)
由于您知道它只能是Client或false,因此可以将其编码为Client | false
类型。这样,TypeScript就足够聪明了,可以算出如果排除false
,剩下的就是Client
。
type ClientResult = Client | false;
const client: ClientResult = await db.connect()
if (client === false) {
return
}
await start(client)
答案 1 :(得分:2)
这对我有用,无论是否声明connect()
:
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
}
您使用的是哪个版本的TypeScript?