Javascript에서 Typescript까지의 스크립트 작성
46432 단어 babelnodetypescriptjavascript
왜?
스크립트는 일반적으로 어느 정도의 수정과 조정이 있어야만 필요한 출력을 얻을 수 있다.Javascript로 작성하면 개발자는 입력과 출력의 모양을 기억해야 합니다.나는 개인적으로 내가 얻은 응답을 회상하기 위해 출력을 기록해야 한다.지금까지 대부분의 자바스크립트 커뮤니티는 Typescript로 전환하는 장점을 깨달았다.연수를 원하시면 방문Serokell's post
우리 뭐 하는 거야?
우리는 the covid tracking api 에서 입력을 가져오고 도표에 그릴 준비를 위해 약간 다른 방식으로 포맷할 것이다.다음은 하루에 미국에서 생산되는 예이다
샘플 입력
[
{
"date":20200916,
"states":56,
"positive":6597783,
"negative":81976741,
"pending":10587,
"hospitalizedCurrently":30278,
"hospitalizedCumulative":390624,
"inIcuCurrently":6308,
"inIcuCumulative":18961,
"onVentilatorCurrently":1651,
"onVentilatorCumulative":2090,
"recovered":2525573,
"dateChecked":"2020-09-16T00:00:00Z",
"death":188802,
"hospitalized":390624,
"lastModified":"2020-09-16T00:00:00Z",
"total":88585111,
"totalTestResults":88574524,
"posNeg":88574524,
"deathIncrease":1202,
"hospitalizedIncrease":1517,
"negativeIncrease":625601,
"positiveIncrease":40021,
"totalTestResultsIncrease":665622,
"hash":"e66c44b8b93e51c84321a2933d4031d75084a04c"
},
...
]
견본 출력
[
{
"x":09-16-2020,
"y":{
"positive":6597783,
"negative":81976741,
"pending":10587,
"hospitalizedCurrently":30278,
"hospitalizedCumulative":390624,
"inIcuCurrently":6308,
"inIcuCumulative":18961,
"onVentilatorCurrently":1651,
"onVentilatorCumulative":2090,
"recovered":2525573,
"death":188802,
"hospitalized":390624,
"total":88585111,
"totalTestResults":88574524,
"posNeg":88574524,
"deathIncrease":1202,
"hospitalizedIncrease":1517,
"negativeIncrease":625601,
"positiveIncrease":40021,
"totalTestResultsIncrease":665622,
},
...
]
기능이 완비된 Javascript 스크립트부터가 아니라...스크립트를 실행하고 Typescript로 전환하여 구조를 구축하고 미래의 변경 사항을 기록합니다Javascript 예제 시작
프로젝트 공간 설정
mkdir script-in-ts && cd script-in-ts
그리고 package.json
를 초기화하면 필요한 스크립트와 의존 항목을 지정할 수 있습니다npm init --y
우리는 우선 스크립트를 자바스크립트에서 실행할 것입니다. 따라서 필요한 의존항을 설치할 것입니다
npm install @babel/core @babel/node @babel/preset-env
babel는 우리로 하여금 현대javascript를 번역할 수 있게 한다.@babel/core
및 @babel/node
모두 이를 가능하게 하고, @babel/preset-env 노드 버전이나 브라우저 지원 같은 내용을 지정할 수 있습니다.자바스크립트를 실행하기 위해 babel 설정
파일 추가
.babelrc
touch .babelrc && code .babelrc
다음 설정을 붙여넣어 노드 버전 10 사용을 지정합니다.이것은 우리로 하여금 spread operator 같은 내용을 방문할 수 있게 할 것이다. 당신은 곧 이곳에서 보게 될 것이다{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "10"
}
}
]
]
}
우리는 이미 창설할 준비가 되어 있습니다!
제작
index.js
파일touch index.js && code index.js
hello world 예제부터console.log("hello world")
가방을 열다.json과 같은 시작 스크립트 추가
{
...
"scripts": {
"start": "babel-node index.js",
...
},
...
}
스크립트가 실행되고 모든 내용을 Typescript로 이동하도록 설정합니다.
npm run start
hello world // expected output
Javascript를 Typescript로 마이그레이션
종속 항목 설치
npm install typescript @babel/preset-typescript @babel/plugin-transform-typescript
첫 번째 의존항은 Typescript 자체이고, 두 번째 의존항은 babel 전송 Typescript의 사전 설정을 사용하는 것이다이러한 Typescript 사전 설정을 포함하려면 업데이트
.babelrc
가 필요합니다.{
"presets": [
"@babel/preset-typescript",
[
...
]
]
}
tsconfig를 만듭니다.json 파일
npx tsc --init
색인 이름을 바꿉니다.인덱스송전 시스템
mv index.js index.ts
패키지의 시작 스크립트를 업데이트합니다.json
{
...
"scripts": {
"start": "babel-node index.ts --extensions '.ts'",
...
},
...
}
비록 우리가 @babel/preset-typescript 파일을 추가했지만, babel은 여전히 .ts
파일을 허용하는 규범이 필요합니다.babel 컴파일을 검증하고 인덱스를 실행합니다.송전 시스템
npm run start
hello world // expected output
🤞 큰 단계는 아닌 것 같지만...예.babel을 자주 설정하지 않으면, 이 설정 설명을 잊어버려서 검색 기능을 발휘할 수 있습니다
Typescript로 손 더럽혀.👨🏻💻
만약 정의 유형과 인터페이스에 익숙하지 않다면, 여기에서 잠시 휴식을 취하고, 익숙함Javascript과 Typescript 사이의 미세한 차이를 익히는 것을 강력히 권장합니다.나는 익숙할 때 이것devhints cheatsheet을 좋아한다.
데이터 가져오기
우리는 json 형식으로 United States COVID-19 impact 의 응답을 입력할 것입니다.
원하는 캡처 라이브러리를 마음대로 사용할 수 있습니다.사용node-fetch
npm install node-fetch @types/node-fetch
응답 가져오기 및 기록import fetch from "node-fetch"
;(async () => {
const response = await fetch(
"https://api.covidtracking.com/v1/us/daily.json"
)
const json = await response.json() //
console.log(json)
})()
입력 입력
콘솔은 이와 유사한 내용을 기록해야 합니다...
[
{
"date":20200916,
"states":56,
"positive":6597783,
"negative":81976741,
"pending":10587,
"hospitalizedCurrently":30278,
"hospitalizedCumulative":390624,
"inIcuCurrently":6308,
"inIcuCumulative":18961,
"onVentilatorCurrently":1651,
"onVentilatorCumulative":2090,
"recovered":2525573,
"dateChecked":"2020-09-16T00:00:00Z",
"death":188802,
"hospitalized":390624,
"lastModified":"2020-09-16T00:00:00Z",
"total":88585111,
"totalTestResults":88574524,
"posNeg":88574524,
"deathIncrease":1202,
"hospitalizedIncrease":1517,
"negativeIncrease":625601,
"positiveIncrease":40021,
"totalTestResultsIncrease":665622,
"hash":"e66c44b8b93e51c84321a2933d4031d75084a04c"
},
...
]
우리 인터페이스를 만들어서 그것을 복제합시다!import fetch from "node-fetch"
interface USInputDay {
date: Date
states: number
positive: number
negative: number
pending: number
hospitalizedCurrently: number
hospitalizedCumulative: number
inIcuCurrently: number
inIcuCumulative: number
onVentilatorCurrently: number
onVentilatorCumulative: number
recovered: number
dateChecked: Date
death: number
hospitalized: number
lastModified: Date
total: number
totalTestResults: number
posNeg: number
deathIncrease: number
hospitalizedIncrease: number
negativeIncrease: number
positiveIncrease: number
totalTestResultsIncrease: number
hash: string
}
;(async () => {
const response = await fetch(
"https://api.covidtracking.com/v1/us/daily.json"
)
const json = await response.json() //
console.log(json)
})()
위의 인터페이스는 하나의 그룹 USInputDay
이기 때문에 이 유형을 json 응답 상수에 적용하면import fetch from "node-fetch"
interface USInputDay {
date: Date
states: number
positive: number
negative: number
pending: number
hospitalizedCurrently: number
hospitalizedCumulative: number
inIcuCurrently: number
inIcuCumulative: number
onVentilatorCurrently: number
onVentilatorCumulative: number
recovered: number
dateChecked: Date
death: number
hospitalized: number
lastModified: Date
total: number
totalTestResults: number
posNeg: number
deathIncrease: number
hospitalizedIncrease: number
negativeIncrease: number
positiveIncrease: number
totalTestResultsIncrease: number
hash: string
}
;(async () => {
const response = await fetch(
"https://api.covidtracking.com/v1/us/daily.json"
)
const json: USInputDay[] = await response.json()
console.log(json)
})()
저희가 이제 Typescript로 전환하는 장점을 체험할 수 있습니다!자동 완성은 앞으로 입력이나 출력을 변경하는 요청을 쉽게 합니다.우리는 파일이 어떤 모양인지 이해하기 위해 더 이상 기록할 필요가 없다.
입력 출력
입력 형식에 비해
x
및 y
개의 값으로 나누어 새로운 형식으로 변환하는 방법을 보여 줍니다import fetch from "node-fetch"
interface USInputDay {
date: Date
states: number
positive: number
negative: number
pending: number
hospitalizedCurrently: number
hospitalizedCumulative: number
inIcuCurrently: number
inIcuCumulative: number
onVentilatorCurrently: number
onVentilatorCumulative: number
recovered: number
dateChecked: Date
death: number
hospitalized: number
lastModified: Date
total: number
totalTestResults: number
posNeg: number
deathIncrease: number
hospitalizedIncrease: number
negativeIncrease: number
positiveIncrease: number
totalTestResultsIncrease: number
hash: string
}
interface USOutputDay {
x: Date
y: Omit<
USInputDay,
"date" | "dateChecked" | "lastModified" | "hash"
>
}
;(async () => {
const response = await fetch(
"https://api.covidtracking.com/v1/us/daily.json"
)
const json: USInputDay[] = await response.json()
})()
위에서 우리는 USInputDay
인터페이스를 다시 사용했고, Omit 실용 프로그램을 사용하여 우리가 설명하고 싶지 않은 키를 삭제했다출력 포맷하기
지금 우리가 해야 할 일은 입력을 출력 구조로 포맷하는 것이다
import fetch from "node-fetch"
interface USInputDay {
date: Date
states: number
positive: number
negative: number
pending: number
hospitalizedCurrently: number
hospitalizedCumulative: number
inIcuCurrently: number
inIcuCumulative: number
onVentilatorCurrently: number
onVentilatorCumulative: number
recovered: number
dateChecked: Date
death: number
hospitalized: number
lastModified: Date
total: number
totalTestResults: number
posNeg: number
deathIncrease: number
hospitalizedIncrease: number
negativeIncrease: number
positiveIncrease: number
totalTestResultsIncrease: number
hash: string
}
interface USOutputDay {
x: Date
y: Omit<
USInputDay,
"date" | "dateChecked" | "lastModified" | "hash"
>
}
;(async () => {
const response = await fetch(
"https://api.covidtracking.com/v1/us/daily.json"
)
const json: USInputDay[] = await response.json()
const output: USOutputDay[] = json.map(
({ date, dateChecked, lastModified, hash, ...theRest }) => ({
x: date,
y: theRest
})
)
})()
나는 이곳을 좀 좋아해서 사용했다spread operator.출력 형식이 입력에서 몇 개의 키만 제외된 것을 알고 있기 때문에 제가 원하는 키를 추출했습니다. ...theRest
출력을 만족시켜야 하는 대상의 모든 나머지 키입니다.파일에 쓰기
마지막 걸음...장담합니다.😉
가져오기file system 및 출력 파일에 쓰기
import fetch from "node-fetch"
import { writeFileSync } from "fs"
interface USInputDay {
date: Date
states: number
positive: number
negative: number
pending: number
hospitalizedCurrently: number
hospitalizedCumulative: number
inIcuCurrently: number
inIcuCumulative: number
onVentilatorCurrently: number
onVentilatorCumulative: number
recovered: number
dateChecked: Date
death: number
hospitalized: number
lastModified: Date
total: number
totalTestResults: number
posNeg: number
deathIncrease: number
hospitalizedIncrease: number
negativeIncrease: number
positiveIncrease: number
totalTestResultsIncrease: number
hash: string
}
interface USOutputDay {
x: Date
y: Omit<
USInputDay,
"date" | "dateChecked" | "lastModified" | "hash"
>
}
;(async () => {
const response = await fetch(
"https://api.covidtracking.com/v1/us/daily.json"
)
const json: USInputDay[] = await response.json()
const output: USOutputDay[] = json.map(
({ date, dateChecked, lastModified, hash, ...theRest }) => ({
x: date,
y: theRest
})
)
writeFileSync("formatted.json", JSON.stringify(output))
})()
그렇습니다!현재 스크립트는 새로운 변경을 하거나 원래대로 사용할 준비가 되어 있습니다!만약 당신이 언제든지 길을 잃었다면, 두려워하지 마세요. here 는 하나의 저장소입니다. 모든 것을 보여 줍니다!
총결산
우리는 처음부터 프로젝트를 설정하고 babel을 사용하여 기본적인 Javascript 파일을 실행하는 방법을 배웠다.그리고 우리는 자바스크립트를 Typescript로 변환하고 babel을 설정하여 Typescript 파일을 처리합니다.다음으로 우리는
node-fetch
를 사용하여 파일을 얻는 방법을 배웠다.우리는 입력과 출력을 제어하기 위해 유형/인터페이스를 구축한 경험을 얻었다. 예를 들어 자동으로 완성하는 것이다.마지막으로 우리는 fs
를 사용하여 내용을 파일에 쓰는 것을 배웠다.
Reference
이 문제에 관하여(Javascript에서 Typescript까지의 스크립트 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/keonik/scripting-from-javascript-to-typescript-lh3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)