Flow vs Typescript Flow에서 Typescript까지.왜?
10996 단어 nodetypescriptwebdevjavascript
이 모든 것은 약 2년 전에 시작되었다.나는 내 응용 프로그램에서
undefined is not a function
과 같은 어리석은 자바스크립트 오류가 끊임없이 발생하는 것에 대해 메스꺼움을 느낀다.그래서 나는 선택할 수 있는 정적 유형을 추가하기로 결정했다.2년 전,javascript 분야는 완전히 다르다.
Flow
과 TypeScript
은 모두 많은 단점이 있다. 라이브러리 지원이 나쁘고 IDE 지원이 거의 없는 것부터 유형 문제와 제한이 없는 것까지.내가 Flow
을 선택한 것은 단지 그것이 더욱 시작하기 쉽기 때문이다. .babelrc
에 삽입하여 작업을 시작합니다.약 6개월 전, 나는 우리의 모든 전단 프로젝트를
Flow
에서 TypeScript
으로 이전하기로 결정했다.이것은 내 머릿속의 격전이다.그래서 나는 다른 사람들이 정확한 도구를 선택할 수 있도록 쓰기로 결정했다.내 실수를 범하지 마라.이 도구들은 매우 비슷해서 일반javascript에 유형 안전성을 제공합니다.본고는 not about types 또는 구조와 명사 아형 간의 차이이다.그것은 이 도구들의 현재 상태를 더 많이 소개했다.
유형 때문에 입력 도구를 변경하는 경우는 거의 없습니다.
떠벌리다
나는 모든 기술 결정에서 가장 중요한 방면부터 시작할 것이다.네, 그것은 투기 구동에 관한 개발입니다.
그러지 마세요.나는 그것이 어떻게 일을 하는지 설명할 것이다. 아마도 너는 생각을 바꿀 것이다.
나는 자주 speak에 관한 글을 쓴다. 등등. 내가
Flow
을 사용하고 있다고 말할 때마다 다른 개발자들은 나에게 "왜 TypeScript
을 사용하지 않습니까?"라고 묻는다.매번 나는 나의 선택을 설명해야 한다.세부 사항, 역사와 도구를 깊이 이해하다.때로는 현재 프로젝트의 상태와 우리의 작업 절차를 설명하기도 한다.네가 어떤 일을 제창하지 않을 때, 이것은 유쾌한 경험이 아니다.나는 단지 사용자일 뿐이다.나는 결코 정말로 하나를 좋아하는 것이 아니라 다른 것을 좋아한다.한 번 또 한 번 이런 대화를 하는 것은 정말 이상하다.그 밖에 우리는 우리의 고객과 we hire의 다른 개발상들에게 서비스를 제공한다.그들 중 일부는 확실히
TypeScript
과 합작하고 싶지만, Flow
과 합작하고 싶지 않다.왜?TypeScript
을 들었기 때문에, 이것은 정말 대단하다.Flow
부근의 투기 열차는 그리 거대하지 않다.Me: Hi, we use X, Y, Z, and
Flow
for this projectDev:
Flow
? Why notTypeScript
?Me: Oh, are kidding me? 🤦
만약 당신이 이런 투기와 싸우고 싶지 않지만, 그것을 당신을 위해 봉사하게 하고 싶다면, 한쪽으로 물러나서 어떤 투기도 사용하는 것이 가장 좋다.현재 작업 흐름에 큰 변화가 없다는 것을 기억하십시오.
인프라
Vue 3.0 will support
TypeScript
기존 Nuxt는 TypeScript
을 지원합니다.원본 코드와 함께 형식을 발표하는 항목이 많습니다.axios
, vuex
, vue-router
, lodash
등등.Flow
지원은 어떻습니까?Vue는 현재 Flow
을 사용하여 입력 (3.0부터 TypeScript
으로 전환) 하고 있지만, 이러한 유형은 개발에만 사용됩니다.너는 자신의 항목에서 그것들을 사용할 수 없다.어쩌면 다른 유형이 있을지도 몰라요?예,
Flow
에는 자체 유형의 저장소가 있습니다.문제는 설치 유형이 완전히 새로운 추가 절차라는 것이다.postinstall
갈고리를 설정하여 매번 npm install
이 호출된 후에도 유형의 기초를 다시 설정해야 합니다. (예, git rebase
)flow-typed
포를 깊이 연구했을 때, 주로 반응을 향한 것임을 발견할 수 있다.Flow
심지어 표준 라이브러리에는 React 원어가 많다.나는 매우 이상하다고 생각한다.그런데 특정 Vue 유형에 대해서는요?네, 한 사람이 관리하는
@vue-flow-type
package을 찾을 수 있습니다.슬프게도 나는 이 독신자다.나는 몇 개의 유행 프로젝트를 유지하는 유형에 정말 싫증이 났다.네가 상상한 바와 같이 오류, 유형 변경, 새로운 버전 등이 있다.TypeScript
이 나를 위해 이 시합을 이겼다.그것의 분배 시스템은 나에게 별도의 일을 강요하지 않을 것이다.물건을 좀 설치하기만 하면 그것은 일을 할 수 있다.types/
하위 폴더는 npm
을 통해 원본 코드와 함께 제공되기 때문입니다.추가 절차가 필요 없습니다.라이브러리 작성자는 types/
폴더를 코드 라이브러리의 나머지 부분과 함께 유지보수합니다.그들은 모든 것이 정상임을 확보할 수 있다.집적 회로 설비
Flow
프로젝트에 대한 IDE의 지원을 살펴보겠습니다.아니면'IDE 지원 없음'이라고 말할게요.이것은 무슨 큰일이 아니다. 나는
nano
만 있으면 코드를 작성할 수 있다.그러나 나는 text editors에서 많은 시간을 보냈고, 나는 그들이 우호적으로 지내기를 바란다.유감스럽게도 모든 주요 IDE(및 텍스트 편집기)의 Flow
플러그인은 결함이 있고 신뢰할 수 없습니다.예를 들어 VSCode plugin은 전혀 작용하지 않는다.또한 VSCode는 최고 수준의
TypeScript
지원으로 유명합니다.인텔리센스, 형식 검사, 실시간 자동 완성을 사용합니다.우리의 VSCode + TS + Vue 설정을 보십시오.
이 간단한 특성을 가지고 당신의 개발 작업 흐름은 더욱 호응성을 느끼기 시작했고 피드백 순환 시간이 현저히 감소했다.
수정되지 않은 오류
또 다른 저의
Flow
체험을 파괴한 일은 Flow
자체에서 복구되지 않은 버그의 수량입니다.예를 들어,
Vuex
을 설치할 때, 모든 Vue
구성 요소는 하나의 추가 속성으로 확장되며, this.$store
을 사용하여 이 속성에 접근할 수 있습니다.문제는 Flow
Vuex
이 추가되었다는 것을 알려줄 방법이 없다는 것이다.그리고 this bug은 2015년에 개업하여 지금까지 4년이 되었습니다!물론 자신의 유형을 작성할 수 있습니다.
// @flow
import Vue from 'vue'
import type { Store } from 'vuex'
import type { State } from '~/types/vuex'
/**
* Represents our extended Vue instance.
*
* We just use the annotations here, since properties are already injected.
* You will need to add new annotations in case you will extend Vue with new
* plugins.
*/
export default class CustomVue extends Vue {
$store: Store<State>
}
하지만 이제는 스스로 자신의 유형을 지켜야 한다.this.$router
속성을 추가하시겠습니까?직접 추가하십시오.Nuxt 특정 유형?너는 너 자신에게 의지할 수밖에 없다.이를 the standard
TypeScript
방법과 비교합니다.import Vue, { ComponentOptions } from "vue";
import { Store } from "./index";
declare module "vue/types/options" {
interface ComponentOptions<V extends Vue> {
store?: Store<any>;
}
}
declare module "vue/types/vue" {
interface Vue {
$store: Store<any>;
}
}
특수 성명을 사용하여 기존 유형을 확장할 수 있습니다.도서관의 작가가 너를 위해 이런 것을 해 주었다.내가 말한 유형 분포 기억나?이 기능은 분포를 더욱 완벽하게 한다.2015년 second well-known bug은 반드시 필요하더라도
this
을 주석할 수 없다.일부 라이브러리에는 이상한 API가 있습니다.Flow
이 있으면 너는 아무것도 할 수 없고, 타자는 그곳에서 보이지 않는다.그러나 TypeScript
이 있으면 모든 상하문에서 this
의 뜻을 주석할 수 있다.이것은 많은 용례에 대해 말하자면 매우 좋은 것이다.왜 이 버그들은 복구되지 않았습니까?몰라요.요 몇 년 동안 그들은 많은 관심을 불러일으켰다.많은 사람들이 이런 것을 원하지만
Flow
팀은 이 프로젝트에 대한 소망을 공유하지 않았다.그들은 지역 사회가 아니라 그들이 원하는 것을 발표했다.발표하다
발표에 대해 말하자면, 나는 반드시 그들의 정책을 언급해야 한다. "일부 것만 발표하고, 사용자로 하여금 그들의 코드를 복구하게 한다."이것은 the release history과 그것이 나의 프로젝트에 한 일이다.거의 모든 버전이 나의 코드를 파괴할 것이다.코드가 거의 없는 템플릿이라는 것을 감안하면 정말 무섭다.
그나저나
Flow
팀은 SemVer를 따르지 않았고 증량만 발표했다.jsx
의 .vue
버전 이후에 파일이 작업을 중지합니다.나는 새 버전에서 그것을 다시 복원할 수 없다.나는 게으른 길을 걸었다. 버전을 잠그고 이 사건 이후 업데이트를 소홀히 했다.TypeScript
은 clear release policy, SemVer를 보유하고 있으며 사회의 광범위한 관심을 받고 있다.장기적으로 보면 이런 상태를 유지하는 것이 훨씬 낫다.결론
우리는 이미 said "Good bye"에서
Flow
을 선택했다.현재 우리의 모든 프로젝트와 프로젝트 템플릿은 TypeScript
을 지원합니다.우리는 아무것도 후회하지 않는다!겸사겸사 한마디 하자면, 우리의 틀은 정말 훌륭하다.지원:
Awesome documentation, 프로젝트의 각 방면을 포괄하는
Reference
이 문제에 관하여(Flow vs Typescript Flow에서 Typescript까지.왜?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/wemake-services/from-flow-to-typescript-why-1k7m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)