npm install typescript --save-dev # install
npx tsc # compileПо аналогии с JSDoc - типы называются с маленькой буквы
let a: number = 3
a = 'this is a string' // error!
function divide(a: number, b: number){
return a/b
}
divide(1, {}) // Error
function printName(user: { name: string } ): void {
console.log(`My name: ${user.name}`)
}
printName({name: 'Nikita'})
function getName(user: { name: string } ){
return user.name;
}
type User = { name: string }
function getName_new(user: User){
return user.name;
}
type User = {
name: string
age?: number
passExam: boolean | undefined
}
const bogdan: User = {name: 'Bogdan', passExam: true}
const viktor: User = {name: 'Viktor'}
const kate: User = {name: 'Kate', age: 32, passExam: false}
interface User {
name: string
age?: number
passExam: boolean | undefined
}
const bogdan: User = {name: 'Bogdan', passExam: true}
const viktor: User = {name: 'Viktor'}
const kate: User = {name: 'Kate', age: 32, passExam: false}
// library.ts
interface MyInterface {
prop: number
}
// code.ts
interface MyInterface {
anotherProp: string
}
let interface: MyInterface = {
prop: 12,
anotherProp: 'value',
}
interface MyInterface {
prop: number
myMethod(): number
}
class MyClass implements MyInterface {
prop = 14
myMethod(){
return 4
}
}function callbackExample(cb: (num: number) => void){
cb(3)
}
callbackExample((val) => { // val: number
console.log(val) // 3
})
type MyCbFn = (num: number) => void
function callbackExampleNew(cb: MyCbFn){
cb(3)
}
type User = {name: string}
const user: User = {name: 'anonimous' }
user['customField'] // Error!
type User2 = Record<string, string>
type User3 = {
[key: string]: string
}
const user2: User2 = {name: 'anonimous' }
user2['customField'] // OK