gpt4 book ai didi

typescript - 高级 TypeScript 参数约束

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:26 26 4
gpt4 key购买 nike

我想知道在 TypeScript 中是否可以实现以下内容,我想要实现的目标:

  1. 如果typeinbox 那么obj 应该是interface IInbox 类型。
  2. 如果typesent那么obj应该是interfaceISent类型。

interface IInbox {

}

interface ISent {

}

class MailClient {
delete(type: "inbox" | "sent", obj: IInbox | ISent) {

}
}

let client = new MailClient();
client.delete('inbox', <ISent>{}); // should give compile error

最佳答案

您可以定义多个签名:

class MailClient {
delete(type: "inbox", obj: IInbox);
delete(type: "sent", obj: ISent)
delete(type: "inbox" | "sent", obj: IInbox | ISent) {}
}

但是那仍然不会有编译错误,因为你们的接口(interface)是相同的。
因为 typescript 正在使用 duck typing那么空对象 ({}) 满足类型要求。
如果您区分两者:

interface IInbox {
a: string;
}

interface ISent {
b: string;
}

然后你得到你的错误:

client.delete('inbox', {} as ISent); // Argument of type '"inbox"' is not assignable to parameter of type '"sent"'

( code in playground )

关于typescript - 高级 TypeScript 参数约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40092956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com