如果尾隨引數的型別是undefined(但如果不是),是否可以將 TypeScript 配置為允許省略泛型函式的尾隨引數?
例子:
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
uj5u.com熱心網友回復:
如果您只想允許 when nameis"second"而不是 when it's "first",則不能只使用可選引數。但是您可以檢查有效負載是否為undefined,如果是,則通過將元組中的第二個元素設為可選來將第二個引數設為可選:
const sendEvent = <Name extends keyof Events>(
...[name, payload]: (Events[Name] extends undefined ? [name: Name, payload?: Events[Name]] : [name: Name, payload: Events[Name]])
) => {
有點長,但它有效,特別是如果你有更多的事件。
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/506772.html
上一篇:如何將引數包中的可呼叫物件與陣列中的相應元素作為引數進行匹配?
下一篇:在axios實體中使用狀態令牌
