Skip to content

Instantly share code, notes, and snippets.

// Perfectly valid because in JavaScript you can access characters in a string by index
// example:
// const x = 'coffee'
// const letterF = x[3] // result: 'f'
const result = something('hello', 50)
// NOT valid because in JavaScript you can't access characters in a string by a string
const result = something('hello', '50')
const result = something({ goodwill: 'a' }, 'toString')
// Completely valid -- TypeScript will not complain
const result = something({ goodwill: 'a' }, 'goodwill')
function something<T, K extends keyof T>(arg1: T, arg2: K) {
//
}
function combine<T, W>(arg1: W, arg2: T): T {
return arg2
}
function combine(arg1: string, arg2: string): string {
return arg2
}
function combine<T, W>(arg1: W, arg2: T): T {
return arg2
}
let fruit = 'apple'
function sayStuff(stuff) {
window.alert(stuff)
}
sayStuff(`i love eating ${fruit}s`) // implicit
// or
sayStuff < number > 500 // explicit
function logAndReturnIt<T>(
valueThatIsGoingToBeLoggedAndReturnedFromAUselessFunction: T,
): T {
console.log(typeof valueThatIsGoingToBeLoggedAndReturnedFromAUselessFunction)
return valueThatIsGoingToBeLoggedAndReturnedFromAUselessFunction
}
function logAndReturnIt(
valueThatIsGoingToBeLoggedAndReturnedFromAUselessFunction: any,
): any {
console.log(typeof valueThatIsGoingToBeLoggedAndReturnedFromAUselessFunction)
return valueThatIsGoingToBeLoggedAndReturnedFromAUselessFunction
}
logAndReturnIt(null) // valid
logAndReturnIt(5) // valid