Giter VIP home page Giter VIP logo

Comments (4)

RyanCavanaugh avatar RyanCavanaugh commented on April 27, 2024

The first one is consistent with a regular "and", for which intersection is a good representation of what "must" be true about what's going on

    if (isString(arg)) {
      if (typeof arg === 'string') {
        const z = arg;
        //    ^?
      }
    }

The second one... I don't know what to make of this. It's possible for a string to end up there; the handling of this situation seems correct.

const s1: {} = "";
const s: Record<string, number> = s1;
t2(s);

from typescript.

kkmuffme avatar kkmuffme commented on April 27, 2024

The first one is wrong without the 2nd part of the condition too (and in your case too). Here without the 2nd part of the condition, it's not correctly report type of "z"

function t1(arg: Record<string, number>|number): string {
    if ( isString(arg) === false ) {
        const y = arg;
        return '';
    }

    const z = arg; // should be "never"
    return '';
}

This should work and "z" be never or it reported as unreachable.

The second one

Fair enough, this empty object issue is another unrelated issue that has been discussed here widely already, so not going to do that again here :)
So the 1st case is left as an issue?

from typescript.

RyanCavanaugh avatar RyanCavanaugh commented on April 27, 2024

z isn't unreachable in legal code, though.

const n1 = "hello";
const n2: { length: number } = n1;
const n3: Record<string, number> = n2;
t1(n3);

from typescript.

kkmuffme avatar kkmuffme commented on April 27, 2024

You're right, since {} is assignable to string confusingly... (e.g. using boolean|number then it works without errors)

Thanks for clarifying.

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.