Giter VIP home page Giter VIP logo

Comments (12)

whzx5byb avatar whzx5byb commented on May 24, 2024 1

See https://github.com/microsoft/TypeScript/wiki/FAQ#indirect-excess-properties-are-ok

from typescript.

snarbies avatar snarbies commented on May 24, 2024 1

Indirect excess properties are not an error. Examples of indirect excess properties would be:

  • values returned by functions
  • values stored in intermediate variables

b is direct. You go straight from value→property.

c in indirect because it is one step removed. You have a getter, which is a function that returns a value.

From the linked FAQ, excess property checks are to defend against things like typos:

const p: Dimensions = {
    width: 32,
    height: 14,
    depht: 11 // <-- typo!!
}

But there are plenty of situations where you want or need to allow extra properties.

from typescript.

fatcerberus avatar fatcerberus commented on May 24, 2024 1

You are conflating two different things. The autocomplete thing is unrelated to the type checking of c.data.

b.data and c.data should throw errors simultaneously or not

No, they shouldn't; it's already been explained several times why c.data doesn't have an error. The excess property check doesn't apply to it, but it's still type-checked properly. For example if you change the code to

const c: T = {
  get data() {
    return 42;
  },
};

then you get a type error.

from typescript.

lqzhgood avatar lqzhgood commented on May 24, 2024 1

You are conflating two different things. The autocomplete thing is unrelated to the type checking of c.data.

b.data and c.data should throw errors simultaneously or not

No, they shouldn't; it's already been explained several times why c.data doesn't have an error. The excess property check doesn't apply to it, but it's still type-checked properly. For example if you change the code to

const c: T = {
  get data() {
    return 42;
  },
};

then you get a type error.

Thank you, I understand my mistake
The real problem should be automatic completion
The problem of automatic completion made me think that c.data had changed to any type, resulting in the loss of type checking

from typescript.

lqzhgood avatar lqzhgood commented on May 24, 2024

See https://github.com/microsoft/TypeScript/wiki/FAQ#indirect-excess-properties-are-ok

bug b.data.b throw type error. and in c.data no type prompt like any,

see typescirpt palay

https://www.typescriptlang.org/play/?#code/C4TwDgpgBAKlC8UDeAoKUAmBDYWBcya6U+UAdgK4C2ARhAE4DcRAvs2yigMYD2ZAzsCg0CcRKnTZcBCcVIBGAEwBmJcoA0RdCKjKALAfXEoAehNRgAC3o8A7hfDQGN+q00dufQVC6iEhdABzCCEpLAAKAEoA4noQinoyGOMFFU1jbQJlbKMzch4hKxt7UEgoZx5XYw50FndmTl4BUP9ZYNCcCOjZdDjgBKSeuQI1dIydbOUoLSga2frOUuhgDH8lngAzSUZTcyQSPEpaBiMRI7p6WaA

from typescript.

fatcerberus avatar fatcerberus commented on May 24, 2024

Sigh... I really wish the wording of this error message would be changed.

This isn't a bug. The excess property check error is not a type error, it's a lint check. You can't rely on it to prevent extra properties from being put on an object because it won't always trigger (which is by design). If that's what you need, see #12936.

The other issue you linked to this (#49511) is unrelated - there is nothing like an any involved here. { a: number, b: number } is a legal subtype of and assignable to { a: number }.

from typescript.

whzx5byb avatar whzx5byb commented on May 24, 2024

When inspecting the code I do find something looks like a bug: #58484.
@lqzhgood , is it what you are talking about?

from typescript.

lqzhgood avatar lqzhgood commented on May 24, 2024

Sigh... I really wish the wording of this error message would be changed.

This isn't a bug. The excess property check error is not a type error, it's a lint check. You can't rely on it to prevent extra properties from being put on an object because it won't always trigger (which is by design). If that's what you need, see #12936.

The other issue you linked to this (#49511) is unrelated - there is nothing like an any involved here. { a: number, b: number } is a legal subtype of and assignable to { a: number }.

The focus of this issue is not on whether additional attributes can be added,
Is difference types of b.data and c.data by use getters
b.data and c.data should throw errors simultaneously or not

from typescript.

lqzhgood avatar lqzhgood commented on May 24, 2024

When inspecting the code I do find something looks like a bug: #58484. @lqzhgood , is it what you are talking about?

yes,
d.data and c.data (getter) Inconsistent types returned,(from the perspective of throwing exceptions)
and c.data looks like any in autocomplete

from typescript.

lqzhgood avatar lqzhgood commented on May 24, 2024

Indirect excess properties are not an error. Examples of indirect excess properties would be:

  • values returned by functions
  • values stored in intermediate variables

b is direct. You go straight from value→property.

c in indirect because it is one step removed. You have a getter, which is a function that returns a value.

From the linked FAQ, excess property checks are to defend against things like typos:

const p: Dimensions = {
    width: 32,
    height: 14,
    depht: 11 // <-- typo!!
}

But there are plenty of situations where you want or need to allow extra properties.

Thank you for your answer, but c.data look like any in autocomplete.

https://www.typescriptlang.org/play/?#code/C4TwDgpgBAKlC8UDeAoKUAmBDYWBcya6U+UAdgK4C2ARhAE4DcR6AXuwZbQ8+gL7MBKFAGMA9mQDOwKDQJxEqdNlwElxUgEYATAGYdugDQtZBXQBZLh4lAD0tqMAAW9MQHdH4aA1f0T7VgIDIj5jIVEJaSgReQRCdABzCBkVLAAKAEp44npkinoybJstPWMbdDkoXWrre3IxGWdXD1BIKB8xP3KodhMhfjDmYXEpFLj1JJScdKz1dFzgfMK5jSDSkwqzaqg+3ihQlHDW6GAMOOOxADNlRjsHJBI8Ljp6azlnhn2gA

image

from typescript.

fatcerberus avatar fatcerberus commented on May 24, 2024

In that case, this is a retroactive duplicate of #58484 😄

from typescript.

lqzhgood avatar lqzhgood commented on May 24, 2024

the real problem is #58484. I will close this issue

from typescript.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.