Giter Site home page Giter Site logo

ts-zen's People

Contributors

quaderi avatar

Stargazers

 avatar

Watchers

 avatar

ts-zen's Issues

Seems to have some issue in _Set

This seems less buggy:

export type NormalizedPathKey = string | symbol

export type NonemptyTuple<X extends unknown = unknown, HasIdx extends number = 0> = (
  X[] & { [k in HasIdx | 0]: X}
) | (
  readonly X[]  & { readonly [k in HasIdx | 0]: X }
)

export type NonemptyPathTuple = NonemptyTuple<NormalizedPathKey>
type Rest<T extends readonly any[]> = 
    T extends readonly [any, ...(infer U)] ? U : T;

export type _Set<
  Object,
  Path extends NonemptyPathTuple,
  Value = unknown
> = Path[0] extends keyof Object
  ? (
    {
      [key in (keyof Object | Path[0])]: Path[0] extends key
        ? (
          Rest<Path> extends NonemptyPathTuple
            ? _Set<Object[Path[0]], Rest<Path>, Value>
            : Value
        )
        : Object[key]
    }
  ) : (
    {
      [key in (keyof Object | Path[0])]: key extends keyof Object
        ? Object[key] : (
          Rest<Path> extends NonemptyPathTuple
            ? _Set<{}, Rest<Path>, Value>
            : Value
        )
    }
  )

  const nestedObject = {
    a: {
        b: {
            c: {
                d: 'Hello',
                foo: 'bar'
            } ,
            bar: 'baz'
        }
    } 
} as const
type NestedObject = typeof nestedObject
const pathABCD = [  'a', 'b', 'c', 'd'] as const

type PathABCD = typeof pathABCD

const goodbye = 'Goodbye' as const
type Goodbye = typeof goodbye
type NestedObjectWithGoodbyeSet = _Set<NestedObject, PathABCD, Goodbye>
const x: NestedObjectWithGoodbyeSet = {
    a: {
        b: {
            bar: "baz",
            c: {
                d: "Goodbye",
                foo: "bar",
            }
        }
    }
}

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.