Return an object without certain keys (dynamic, typesafe)2019 Community Moderator ElectionTyping removal of a key from an objectHow do I dynamically assign properties to an object in TypeScript?access key and value of object using *ngForng-if/ng-hide doesn't get updated on real time on HTML pageboolean set to false; returns true on if statement without ==Return boolean (true | false) value when all delete operations are successfully performedTypescript boolean function must return a valueWhat would the type definition look like for a function that returns an object that is a subset of an original objecthow can you express “keyof T” to be a subset of String?Trying to use map() in TypeScript with a get-or-default statementIf statement is not working when I pass a Boolean variable to a function?
Vector-transposing function
I am the person who abides by rules but breaks the rules . Who am I
How can I portion out frozen cookie dough?
Was this cameo in Captain Marvel computer generated?
Unfamiliar notation in Diabelli's "Duet in D" for piano
3.5% Interest Student Loan or use all of my savings on Tuition?
Sort array by month and year
Interpretation of linear regression interaction term plot
How would an energy-based "projectile" blow up a spaceship?
What do you call someone who likes to pick fights?
How to educate team mate to take screenshots for bugs with out unwanted stuff
School performs periodic password audits. Is my password compromised?
Mixed Feelings - What am I
How spaceships determine each other's mass in space?
Can I challenge the interviewer to give me a proper technical feedback?
Did Amazon pay $0 in taxes last year?
Why isn't P and P/poly trivially the same?
Does the US political system, in principle, allow for a no-party system?
Issue with units for a rocket nozzle throat area problem
Averaging over columns while ignoring zero entries
How can I have x-axis ticks that show ticks scaled in powers of ten?
If nine coins are tossed, what is the probability that the number of heads is even?
What is better: yes / no radio, or simple checkbox?
Use Mercury as quenching liquid for swords?
Return an object without certain keys (dynamic, typesafe)
2019 Community Moderator ElectionTyping removal of a key from an objectHow do I dynamically assign properties to an object in TypeScript?access key and value of object using *ngForng-if/ng-hide doesn't get updated on real time on HTML pageboolean set to false; returns true on if statement without ==Return boolean (true | false) value when all delete operations are successfully performedTypescript boolean function must return a valueWhat would the type definition look like for a function that returns an object that is a subset of an original objecthow can you express “keyof T” to be a subset of String?Trying to use map() in TypeScript with a get-or-default statementIf statement is not working when I pass a Boolean variable to a function?
I'm trying to implement a "except"-method in TypeScript.
The purpose would be something like this:
const obj = a: true, b: 1, c: 'test', d: false
const objExcept = except(obj, 'b', 'd')
My problem is not the actual key exclusion, but the typesafe return value.
Ideally accessing objExcept.b
should give me an error, cause the return value is:
objExcept: a: boolean, c: string = a: true, c: 'test' `
This is my current implementation
export function except<
T extends Dictionary,
K extends any[],
R extends Pick<T, Exclude<keyof T, K[number]>>
> (value: T, ...exceptions: K): R
const copy: Record<string: any> =
for (const key in value)
if (!value.hasOwnProperty(key)
return copy as R
Many thanks in advance
typescript
add a comment |
I'm trying to implement a "except"-method in TypeScript.
The purpose would be something like this:
const obj = a: true, b: 1, c: 'test', d: false
const objExcept = except(obj, 'b', 'd')
My problem is not the actual key exclusion, but the typesafe return value.
Ideally accessing objExcept.b
should give me an error, cause the return value is:
objExcept: a: boolean, c: string = a: true, c: 'test' `
This is my current implementation
export function except<
T extends Dictionary,
K extends any[],
R extends Pick<T, Exclude<keyof T, K[number]>>
> (value: T, ...exceptions: K): R
const copy: Record<string: any> =
for (const key in value)
if (!value.hasOwnProperty(key)
return copy as R
Many thanks in advance
typescript
I asked something slightly similar a while ago, does it help at all?: stackoverflow.com/questions/54199582/…
– OliverRadini
2 days ago
@OliverRadini forgot I answered that :))
– Titian Cernicova-Dragomir
2 days ago
1
@TitianCernicova-Dragomir haha I was wondering if you'd answer this one, your answer to my question was very useful!
– OliverRadini
2 days ago
1
Thanks for the hint @OliverRadini. The problem is quite similar but for my purpose i had to be able to exclude 1+ keys
– skillmotion
2 days ago
add a comment |
I'm trying to implement a "except"-method in TypeScript.
The purpose would be something like this:
const obj = a: true, b: 1, c: 'test', d: false
const objExcept = except(obj, 'b', 'd')
My problem is not the actual key exclusion, but the typesafe return value.
Ideally accessing objExcept.b
should give me an error, cause the return value is:
objExcept: a: boolean, c: string = a: true, c: 'test' `
This is my current implementation
export function except<
T extends Dictionary,
K extends any[],
R extends Pick<T, Exclude<keyof T, K[number]>>
> (value: T, ...exceptions: K): R
const copy: Record<string: any> =
for (const key in value)
if (!value.hasOwnProperty(key)
return copy as R
Many thanks in advance
typescript
I'm trying to implement a "except"-method in TypeScript.
The purpose would be something like this:
const obj = a: true, b: 1, c: 'test', d: false
const objExcept = except(obj, 'b', 'd')
My problem is not the actual key exclusion, but the typesafe return value.
Ideally accessing objExcept.b
should give me an error, cause the return value is:
objExcept: a: boolean, c: string = a: true, c: 'test' `
This is my current implementation
export function except<
T extends Dictionary,
K extends any[],
R extends Pick<T, Exclude<keyof T, K[number]>>
> (value: T, ...exceptions: K): R
const copy: Record<string: any> =
for (const key in value)
if (!value.hasOwnProperty(key)
return copy as R
Many thanks in advance
typescript
typescript
asked 2 days ago
skillmotionskillmotion
153
153
I asked something slightly similar a while ago, does it help at all?: stackoverflow.com/questions/54199582/…
– OliverRadini
2 days ago
@OliverRadini forgot I answered that :))
– Titian Cernicova-Dragomir
2 days ago
1
@TitianCernicova-Dragomir haha I was wondering if you'd answer this one, your answer to my question was very useful!
– OliverRadini
2 days ago
1
Thanks for the hint @OliverRadini. The problem is quite similar but for my purpose i had to be able to exclude 1+ keys
– skillmotion
2 days ago
add a comment |
I asked something slightly similar a while ago, does it help at all?: stackoverflow.com/questions/54199582/…
– OliverRadini
2 days ago
@OliverRadini forgot I answered that :))
– Titian Cernicova-Dragomir
2 days ago
1
@TitianCernicova-Dragomir haha I was wondering if you'd answer this one, your answer to my question was very useful!
– OliverRadini
2 days ago
1
Thanks for the hint @OliverRadini. The problem is quite similar but for my purpose i had to be able to exclude 1+ keys
– skillmotion
2 days ago
I asked something slightly similar a while ago, does it help at all?: stackoverflow.com/questions/54199582/…
– OliverRadini
2 days ago
I asked something slightly similar a while ago, does it help at all?: stackoverflow.com/questions/54199582/…
– OliverRadini
2 days ago
@OliverRadini forgot I answered that :))
– Titian Cernicova-Dragomir
2 days ago
@OliverRadini forgot I answered that :))
– Titian Cernicova-Dragomir
2 days ago
1
1
@TitianCernicova-Dragomir haha I was wondering if you'd answer this one, your answer to my question was very useful!
– OliverRadini
2 days ago
@TitianCernicova-Dragomir haha I was wondering if you'd answer this one, your answer to my question was very useful!
– OliverRadini
2 days ago
1
1
Thanks for the hint @OliverRadini. The problem is quite similar but for my purpose i had to be able to exclude 1+ keys
– skillmotion
2 days ago
Thanks for the hint @OliverRadini. The problem is quite similar but for my purpose i had to be able to exclude 1+ keys
– skillmotion
2 days ago
add a comment |
1 Answer
1
active
oldest
votes
You are very close you just need to get the compiler to infer literal types for K
. The best way to do this is to restrict the items in K
to keyof T
. This will also check that property keys are part of the target object.
export function except<
T extends Record<string, any>,
K extends Array<keyof T>,
R extends Pick<T, Exclude<keyof T, K[number]>>
> (value: T, ...exceptions: K): R
const copy: Record<string, any> =
for (const key in value)
if (!value.hasOwnProperty(key)
return copy as R
const obj = a: true, b: 1, c: 'test', d: false
const objExcept = except(obj, 'b', 'd')
objExcept.a
objExcept.b //err
If you want to allow any keys not necessarily just known keys of T
you can also use K extends Array<PropertyKey>
this will allow any key but exclude any keys that overlap from T
Thank you so much (actually: again ;)). I work's perfectly fine now
– skillmotion
2 days ago
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55023523%2freturn-an-object-without-certain-keys-dynamic-typesafe%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You are very close you just need to get the compiler to infer literal types for K
. The best way to do this is to restrict the items in K
to keyof T
. This will also check that property keys are part of the target object.
export function except<
T extends Record<string, any>,
K extends Array<keyof T>,
R extends Pick<T, Exclude<keyof T, K[number]>>
> (value: T, ...exceptions: K): R
const copy: Record<string, any> =
for (const key in value)
if (!value.hasOwnProperty(key)
return copy as R
const obj = a: true, b: 1, c: 'test', d: false
const objExcept = except(obj, 'b', 'd')
objExcept.a
objExcept.b //err
If you want to allow any keys not necessarily just known keys of T
you can also use K extends Array<PropertyKey>
this will allow any key but exclude any keys that overlap from T
Thank you so much (actually: again ;)). I work's perfectly fine now
– skillmotion
2 days ago
add a comment |
You are very close you just need to get the compiler to infer literal types for K
. The best way to do this is to restrict the items in K
to keyof T
. This will also check that property keys are part of the target object.
export function except<
T extends Record<string, any>,
K extends Array<keyof T>,
R extends Pick<T, Exclude<keyof T, K[number]>>
> (value: T, ...exceptions: K): R
const copy: Record<string, any> =
for (const key in value)
if (!value.hasOwnProperty(key)
return copy as R
const obj = a: true, b: 1, c: 'test', d: false
const objExcept = except(obj, 'b', 'd')
objExcept.a
objExcept.b //err
If you want to allow any keys not necessarily just known keys of T
you can also use K extends Array<PropertyKey>
this will allow any key but exclude any keys that overlap from T
Thank you so much (actually: again ;)). I work's perfectly fine now
– skillmotion
2 days ago
add a comment |
You are very close you just need to get the compiler to infer literal types for K
. The best way to do this is to restrict the items in K
to keyof T
. This will also check that property keys are part of the target object.
export function except<
T extends Record<string, any>,
K extends Array<keyof T>,
R extends Pick<T, Exclude<keyof T, K[number]>>
> (value: T, ...exceptions: K): R
const copy: Record<string, any> =
for (const key in value)
if (!value.hasOwnProperty(key)
return copy as R
const obj = a: true, b: 1, c: 'test', d: false
const objExcept = except(obj, 'b', 'd')
objExcept.a
objExcept.b //err
If you want to allow any keys not necessarily just known keys of T
you can also use K extends Array<PropertyKey>
this will allow any key but exclude any keys that overlap from T
You are very close you just need to get the compiler to infer literal types for K
. The best way to do this is to restrict the items in K
to keyof T
. This will also check that property keys are part of the target object.
export function except<
T extends Record<string, any>,
K extends Array<keyof T>,
R extends Pick<T, Exclude<keyof T, K[number]>>
> (value: T, ...exceptions: K): R
const copy: Record<string, any> =
for (const key in value)
if (!value.hasOwnProperty(key)
return copy as R
const obj = a: true, b: 1, c: 'test', d: false
const objExcept = except(obj, 'b', 'd')
objExcept.a
objExcept.b //err
If you want to allow any keys not necessarily just known keys of T
you can also use K extends Array<PropertyKey>
this will allow any key but exclude any keys that overlap from T
answered 2 days ago
Titian Cernicova-DragomirTitian Cernicova-Dragomir
69.2k34765
69.2k34765
Thank you so much (actually: again ;)). I work's perfectly fine now
– skillmotion
2 days ago
add a comment |
Thank you so much (actually: again ;)). I work's perfectly fine now
– skillmotion
2 days ago
Thank you so much (actually: again ;)). I work's perfectly fine now
– skillmotion
2 days ago
Thank you so much (actually: again ;)). I work's perfectly fine now
– skillmotion
2 days ago
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55023523%2freturn-an-object-without-certain-keys-dynamic-typesafe%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
I asked something slightly similar a while ago, does it help at all?: stackoverflow.com/questions/54199582/…
– OliverRadini
2 days ago
@OliverRadini forgot I answered that :))
– Titian Cernicova-Dragomir
2 days ago
1
@TitianCernicova-Dragomir haha I was wondering if you'd answer this one, your answer to my question was very useful!
– OliverRadini
2 days ago
1
Thanks for the hint @OliverRadini. The problem is quite similar but for my purpose i had to be able to exclude 1+ keys
– skillmotion
2 days ago