[英]TypeScript: Omit trailing parameter of generic function when its type is undefined
如果尾隨參數的類型undefined
(但如果未定義),是否可以配置 TypeScript 以允許省略通用 function 的尾隨參數?
例子:
type Events = {
readonly first: { readonly foo: string};
readonly second: undefined;
}
const sendEvent = <Name extends keyof Events>(name: Name, payload: Events[Name]) => {
console.log(`SEND EVENT "${name}"`, name, payload);
}
sendEvent('first', { foo: 'bar'}); // <-- OK
sendEvent('second', undefined); // <-- OK
sendEvent('first'); // <-- Error as expected, Events["first"] isn't undefined,
// that's good
sendEvent('second'); // <-- Error: 'Expected 2 arguments, but got 1.'
// would like to not have an error here, since
// Events["second"] is undefined
如果您只想在name
為"second"
而不是"first"
時允許這樣做,則不能只使用可選參數。 但是您可以檢查有效負載是否為undefined
,如果是,則通過將元組中的第二個元素設為可選來將第二個參數設為可選:
const sendEvent = <Name extends keyof Events>(
...[name, payload]: (Events[Name] extends undefined ? [name: Name, payload?: Events[Name]] : [name: Name, payload: Events[Name]])
) => {
有點長,但它有效,特別是如果你有更多的事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.