better-typescript-lib icon indicating copy to clipboard operation
better-typescript-lib copied to clipboard

New Object.values() type does not infer enums and results in unknown[].

Open Andyuu opened this issue 1 year ago • 1 comments
trafficstars

https://www.typescriptlang.org/play/?target=99&ts=5.5.4#code/JYOwLgpgTgZghgYwgAgPICMBWEFgMID2IAzmFAK64FTIDeAUMsgPQBUrjTryAShGOSglkcECKhQ4AT2QEYyAG5wANuQjFZ8sAAsUEEOQC20OOmUoADlAIXoYYOs0ixBLDjCdk3AAIW4kw1k0N1xkHTgwZAQiMDhQDR1La1soe0dRABNkYx0CDOIAOmQAFW1gDQRRZHQUKtdsUPDIqQJyKKgICIgs6mdkCAAPcvsQAHNkABECBCN9SIwGyIBZPIhlZAAKCdQlgEpZELACz1ZmTiVVdQAeYoA+DYIALmQAQQlpABlgAGsIG9vds9igBtAC6AG5OGwOEwvLx+IJhFV-JIZHJFCo1Bp0Yl+gZjJIzEkbHYHNj5HVDidkL5-HBAgRgoswtoIlEYnFhLirCTUmTnFkcto8oUSmUKlUan16u4WWyWm0EB0uj0aFVBsNQOMpjNjOAmbKVhk1pttnsDotjrDTudMdcANL9AaQED5ZAABWSdik9ogUgANMgAGr3TyyZ58aJQDJXe2BkP+ziAzakKBap0ut2OgD8weQz3xNRog0zGhzeee5BA3xABAA7iBdmDIUxodS+AIhBpke80fILlinLj9LNCeZkDyUmlydKqdaaX4AkEFrKmuzwJyEroJ16+elXdl+ML8kVSuUopLai5DnLmq12p1IKq+hrSOmdbN9SvQkaTVsdvsMq4FaXBnEwA7qA8zy0AAvsmVY1vWIDNvQULsO2CJdn0KLSE4vxSMwEEzsO+ImESO68tOTiUos1K0kujLfpEa7RBu8QssSU78pkh65CeYrnpUYhSjRq6sneirKk+shqmIr4jNq0yfvMN6-us-7mkBRwnGBeJkGS-xQa8vZfL8-zJsCqZaoGxSgihrbofOHaIt2Yg4X2yD4YRdrEduI4EqY46TqSjjoqJuB0Yu9LLjeLEcux3K7lRPFCiKp7ihewlXhaYnyveSqPt0MkvkMb5jJMSl6ipzJqaaAE5cBOmcHMaYOhm+hup6lE+n68ahrC4bwlGMZxsGtyJkwFlWWMgbTeMJYdWWyC5kG+bIIW0Dta6S0rWtCG1g2dkQmhMJcPCnZIm5vZ4X63mXL5eikWOnEhTO4UePO9HRYxsXieusQJduwV7q5gpHmlAkSlls7MmuCoPiqxXqqVCkVbqcwGj+qzqWagGHCBXi6S1ZJGbBU36TNyD7UhR2QidGEXa5DWRKxAMgOmKjrEhFFTjIxrEEqwAWGA1BvdetGfVFDKY8xf2s5uHE869Aq8ceopnlD1TZVpt7IPDBWI70yOauVH5VTLyC1RpeOWk1TCjPwqANl1vMTOogvC6LNxbW6sH9bCTwlBNyDJgwA3Au6yCgJ5frorZQJSLYGQu96bsC2mntQDcEegrcLbIDByAAGR0GGwIDM8KepD1UigpXSVSGnHsi1A+cwZCMGof5yAAKLFOokRh73Az0hY44ALzIAA5IMo-mFP9Cd-QrGkBi93IJPTEFERGx9wPuzL0Qq-E44m-4yfxC7-3pC7EAA

In the above playground, you can see that both Object.values() and Object.entries() both come up with values of unknown[]. This is really not ideal behaviour.

https://www.typescriptlang.org/play/?target=99&ts=5.5.4#code/JYOwLgpgTgZghgYwgAgPICMBWEFgMID2IAzmFAK64FTIDeAUMsgPQBUrjTryAShGOSglkcECKhQ4AT2QEYyAG5wANuQjFZ8sAAsUEEOQC20OOmUoADlAIXoYYOs0ixBLDjCdk3AAIW4kw1k0N1xkHTgwZAQiMDhQDR1La1soe0dRABNkYx0CDOIAOmQAFW1gDQRRZHQUKtdsUPDIqQJyKKgICIgs6mdkCAAPcvsQAHNkABECBCN9SIwGyIBZPIhlZAAKCdQlgEpZELACz1ZmTiVVdQAeYoA+DYIALmQAQQlpABlgAGsIG9vds9igBtAC6AG5OGwOEwvLx+IJhFV-JIZHJFCo1Bp0Yl+gZjJIzEkbHYHNj5HVDidkL5-HBAgRgoswtoIlEYnFhLirCTUmTnFkcto8oUSmUKlUan16u4WWyWm0EB0uj0aFVBsNQOMpjNjOAmbKVhk1pttnsDotjrDTudMdcANL9AaQED5ZAABWSdik9ogUgANMgAGr3J7w6JQDJXe2BkOA4NgyFMaHUvgCIQaZHvNHyC5Ypy4-SzQnmZA8lJpcnSqnWml+AJBBayprs8CchK6MtevnpV3ZfjC-JFUrlKKS2ouQ5y5qtdqdSCqvoa0haybTWb6puhI0mrY7fYy3BWrhnJh59QPZ60AC+8fIIG+IAIAHcQIn6FD2KmERm+ijpE4vxSMw55VoW+ImESXa8pWTiUos1K0g2jJbpELbRG28QssSFb8pk-a5EOYqjpUYhSvBzasjOirKgushqmIy4jNq656vMU47use7moeRwnKeeJkGS-yXq82ZfL8-zxsCpBQFqgbFKC77Jl+tZpoimZiP+ObIEBIF2mBnZFgSpiluWpKOOiFG4Ih9b0o2U7oRyWHct2sH4UKIrDuKY5kROFqUfKs5KvO3T0UuQwrmMa66nMBrbqsXFmgehzHl4AlzHJDpOi6bqejBPp+rGobPHwEZRjGwYAs8MlCWMsZKRCn4wlw8LpkiWnZoBfr6Zchl6BBJY4RZVbWR4tZIfZKGOVRraxC5nbmT2mmCgOXnERKfnVsyLYKnOKrheqkXMTFG7scynGmvuAVHvxnCZWSok3tJsnycg96Pi+ICNZCzXfu1mk3ZEGHzSAq4qOsX3QRWMjGsQSrABYYDUKNk4IRNdkMvFaGzSD7bYdDI0CgRg6iiOm3VP5vHTsge0hQdvRHZq0U6md2PIJd3EpZad1MKM-CoK++UwxM6gI0jKM3Dl+huje9yeLIQL+pw8YMLCyDAu6yCgLpfroopQJSLYGTC96ovw3JEtQDcmugrcSbINeyAAGR0ArwIDM8pupIVUigl7blSOb4vI1ADvXpC14fsZyAAKLFOokRq3HAz0hYpYALzIAA5IMafmNnytR-QGGkBifXIFnqEFKBGzx4nuwl0QZcPY4Vepa3xB1wnpC7EAA

The previous behaviour inferred them in what I believe is the correct way.

Andyuu avatar Aug 01 '24 10:08 Andyuu

Thanks for the feedback! I know this is inconvenient, but I had to make this change for safety.

See below example to know what was bad with the previous behavior.

enum ETest {
  Example = 'example',
}

const values = Object.values(ETest)
const entries = Object.entries(ETest)

const evilObject = {
  Example: ETest.Example,
  bad: 12345
};

const evilETest: typeof ETest = evilObject;

const values2 = Object.values(evilETest);
const entries2 = Object.entries(evilETest);

See also: #46

uhyo avatar Aug 01 '24 13:08 uhyo