Last active
September 28, 2021 08:25
-
-
Save gaetanlegac/74f672d8dcdb97f542183a84b9aa5e73 to your computer and use it in GitHub Desktop.
Get object type with required and/or additionnal fields
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare type With< | |
TObject, | |
TRequired extends (keyof TObject) | {[key in keyof TObject]?: any}, | |
TAdditionnal extends {[key: string]: any} = {} | |
> = ( | |
Omit<TObject, TRequired extends (keyof TObject) ? TRequired : keyof TRequired> | |
& | |
(TRequired extends (keyof TObject) ? Required<Pick<TObject, TRequired>> : TRequired) | |
& | |
TAdditionnal | |
) | |
/*---------------------------------- | |
- USAGE EXAMPLE | |
- https://www.typescriptlang.org/play?#code/CYUwxgNghgTiAEAXAngBwQdQJaIBYB4AoeE+AFQHkAjAK3EQBpjSyAlEARwFcs5h4QAD0QgAdsADO8ABQBrEMgD2AM3LU6YRAEp4AH3gBvANrzk8LKPimVa2vQC6AfgBc8KKOQBfJqXIBBYGAcLEVRUSgIAWExSUMTBVcJRBgLAHN7V3cveABeQ09CAD5cmWYSCgBbHHxKO00GcnZuXhB+IRFxKTkFG1qNbXhHRs4ePnhXa1U2EZbgYrL4ADJ4Belp5rH2mK7J236dIabR1vwABSwwWRr1egb147ni13vZrQXFhbIAoMQQsIjCG9fL5CAB6UHwACigigFVQEBACxBkCgEikAFlkEcQEkagARKCIKBRDqxLIlLLFAwLVBcKgQC7wLgwCAAQkSyTSAG4aXSGWB4MBCVAXOQCUSeQVgaRCCh0PBsUk-OJxcS8tg8PhMYrGPAAORCol6wo88GGJksjkpUSpBqGqCZDzwKXSlZyhA65XAAByXAqIBSYFVJQ1BG1IxxuoMguFrlEfqoAedJrBEOjzIgVrSdtj8HjFUTMGdQA | |
----------------------------------*/ | |
class MyRequest<TData extends any = any> { | |
public url!: string; | |
public data?: TData; | |
} | |
type RequestAndData = With<MyRequest, 'data'>; | |
// { url: string, data: any } | |
type RequestAndNumericData = With<MyRequest, { data: number }>; | |
// { url: string, data: number } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment