簡體   English   中英

TypeScript:當其類型未定義時,省略通用 function 的尾隨參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM