Skip to content

Instantly share code, notes, and snippets.

@joduplessis
Created September 12, 2017 06:50
Show Gist options
  • Select an option

  • Save joduplessis/7b3b4340353760e945f972a69e855d11 to your computer and use it in GitHub Desktop.

Select an option

Save joduplessis/7b3b4340353760e945f972a69e855d11 to your computer and use it in GitHub Desktop.
Setting, deleting and retrieving cookies in Typescript.
@wellingtonfds

Copy link
Copy Markdown

thanks guy!!

@ricocheting

Copy link
Copy Markdown

The error Object is possibly 'undefined' appears to be from typescript thinking .pop() can return an undefined result (even though the length check should prevent that).

For me it goes away with:

if (parts.length === 2) {
	const ppop = parts.pop();
	if (ppop) {
		return ppop.split(";").shift();
	}
}

@tp00012x

Copy link
Copy Markdown

You are missing the return type for getCookie.

@benediktvaldez

Copy link
Copy Markdown

Just commenting to say that with the latest typescript you could solve the pop undefined scenario like this

export function getCookie(name: string) {
    const value = "; " + document.cookie;
    const parts = value.split("; " + name + "=");
    
    if (parts.length == 2) {
        return parts.pop()?.split(";").shift();
    }
}

Alternatively if you'd like to consistently return a string you could do it like this

  return (
    (parts.length === 2 &&
      parts
        .pop()
        ?.split(";")
        .shift()) ||
    ""
  );

@kittanat-mos

Copy link
Copy Markdown

thank you krub

@AbbottF

AbbottF commented May 14, 2022

Copy link
Copy Markdown

Thank you. This has helped me weening myself from jQuery Libraries...and morphing my js to ts.

@mctrafik

mctrafik commented May 3, 2023

Copy link
Copy Markdown

For those seeing this thread in 2023, getting a cookie can be implemented as

const getCookie = (cookieName: string) => new RegExp(`${cookieName}=([^;]+);`).exec(document.cookie)?.[1];

which IMHO is more elegant than shifting values out of an array and splitting out all cookie entries first.

@ayodejii

ayodejii commented May 7, 2024

Copy link
Copy Markdown

@mctrafik this is good but readability could be better.

@kiryuxabas

Copy link
Copy Markdown

Better to use parts.length === 2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment