이 글은 주로 리액트 프로젝트에 대한 정적 타입 검사 방식을 소개하는데, 이는 특정 참조 값을 가지고 있습니다. 이제 필요한 친구들이 참고할 수 있도록 공유합니다.
타입 검사가 필요한 이유 # 🎜🎜#
JS는 유연성이 뛰어나지만 모호한 논리, 구문 오류 또는 데이터 유형을 쉽게 무시할 수 있다는 단점도 있습니다. 컴파일이나 런타임 중에 보고되는 것처럼 보이지만 이상하고 해결하기 어려운 다양한 버그가 발생할 수 있습니다. 예: function getPrice(x) { return x * 10; } getPrice('a23') // NaN
function getDefaultValue (key, emphasis) { let ret; if (key === 'name') { ret = 'GuangWong'; } else if(key=== 'gender') { ret = 'Man'; }else if(key ==='age'){ ret = 18; } else { throw new Error('Unkown key '); } if (emphasis) { ret = ret.toUpperCase(); } return ret; } getDefaultValue('name'); // GuangWong getDefaultValue('gender', true) // MAN getDefaultValue('age', true)이것은 간단한 함수이며 첫 번째 매개변수 키는 기본값을 가져오는 데 사용됩니다. 두 번째 매개변수 강조는 특정 시나리오에서 대문자를 강조하는 데 사용됩니다. 결과를 자동으로 대문자로 변환하려면 true만 전달하면 됩니다. 그러나 실수로 age 값을 숫자 리터럴로 쓴 경우 getDefaultValue('age', true)를 호출하면 런타임 시 오류가 보고됩니다. 이는 비즈니스가 온라인 상태가 된 후에만 발생할 수 있으며, 이로 인해 비즈니스를 직접 사용할 수 없게 됩니다또한 직장에서 n 모듈 사이에 전달되는 객체의 속성이 종종 정의되지 않게 되었습니다. 위의 내용은 코드 견고성의 문제입니다. 직장에서 또 다른 골칫거리는 협업의 문제입니다. 다른 사람이 제공하는 메소드를 어떻게 하면 한눈에 알아볼 수 있는 문서를 생성할 수 있을까요? 프로젝트에는 항상 여러 사람의 공동 작업이 필요하기 때문에 A() 함수를 작성했고 B는 a() 함수를 호출할 때 a()에 필요한 매개 변수와 반환할 매개 변수를 알기 위해 API 문서를 읽어야 했습니다. 그러다가 A반 친구가 a() 함수를 변경했는데, 문서 업데이트를 깜빡하고 이때 막 프로젝트를 맡은 C반 친구가 API 문서와 a() 함수를 살펴봤습니다. 질문 표면적으로: 제공된 인터페이스는 팀 협업에서 어떻게 설명됩니까? 관련 문제는 다음과 같습니다. 1. 인터페이스는 매개변수와 반환 값을 어떻게 설명합니까?
2. 수많은 요구 사항 반복을 통해 인터페이스 매개변수와 반환 값이 여러 번 변경되었는데, 이 API에 해당하는 문서를 어떻게 업데이트해야 합니까?
4. 데이터 형식을 어떻게 설명하나요?
- 대규모 프로젝트 유지보수 가능
- #🎜 🎜#효율성 향상, 컴파일 단계 대신 코드 작성 시 오류 보고
- #🎜 🎜#
코드의 가독성 향상 가능 Code as Document
향상된 디자인
- #🎜 🎜#Powered by Flow by Facebook JavaScript 정적 유형 검사 도구는 전체 프로젝트를 완전히 재구성하지 않고도 부분적으로 도입할 수 있으므로 이미 일정 규모를 갖춘 프로젝트의 경우 마이그레이션 비용이 더 적고 실현 가능합니다.
- #🎜🎜 #
.babelrc 파일에 플러그인 추가
npm install -g flow-bin
npm install --save-dev babel-plugin-transform-flow-strip-types
- #🎜 🎜#
- 확장 프로그램 설치(⇧⌘X): 흐름 언어 지원#🎜 🎜# JavaScript에 대한 VS Code의 기본 구성 수정
-
#🎜 🎜#
코드 -> 환경설정-> 사용자 설정( ⌘,) 검색: javascript.validate.enable
프로젝트에서 사용
- 다음과 같이 정적 검사가 필요한 파일 헤더에 흐름을 도입합니다. #🎜🎜 #
- Use typescript
TypeScript는 JavaScript의 상위 집합이라고 불리는 Microsoft에서 출시한 정적 코드 검사 솔루션입니다. 물론, 최종 코드는 JavaScript
1로 컴파일될 수 있습니다.
{ "presets": [ "es2015", "react", "stage-1" ], "plugins": [ "react-flow-props-to-prop-types" ] }
/* @flow */ function getPrice(x: number) { return x * 10; } getPrice('a23') // vscode 工具提示错误
2. #js 작성 방법
let num: number; num = 'likely'; [ts] 不能将类型“"likely"”分配给类型“number”。 let num: number
위와 아래는 JavaScript 함수입니다. 메서드의 작성을 보지 않으면 이 API에 어떤 함정이 있을지 알 수 없습니다.
export const fetch = function (url, params, user) { // dosomething return http(options).then(data => { return data }).catch(err => { return err }) }
- 위의 TypeScript에는 많은 정보가 포함되어 있어 함수 호출 방법을 쉽게 알 수 있습니다.
- url은 문자열이거나 객체 유형# 🎜🎜#
user는 필수입니다. 물론 User 유형에서는
을 전달하지 않을 수도 있습니다. Promise의 평가 결과는 Object일 수도 있고 Error일 수도 있습니다.
#🎜🎜 #
3.Component
export const fetch = function (url: string | object, params?: any, user?: User): Promise<object | Error> { // dosomething return http(options).then(data => { return data }).catch(err => { return err }) }
위의 컴포넌트에 대해 컴포넌트가 어떤 속성을 가지고 있는지, 어떤 속성을 가지고 있는지 명확하게 알 수 있습니다. 속성은 필수이고 어떤 속성은 선택사항인지 한눈에 알 수 있으며 문서화 코드와 관련해 우리가 실제로 수행하는 작업은 무엇인지
关于typescript还有很多其他特点,如类,接口,泛型等,具体可参考官方文档
https://www.typescriptlang.org/
项目迁移typescript
1.node
(1)使用npm安装:npm install -g typescript,当前项目使用了是v2.8.3
(2)2.2 tsconfig.json
{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": true, "sourceMap": true, "lib": ["es6", "dom"], "outDir": "dist", "baseUrl": ".", "jsx": "react", "paths": { "*": [ "node_modules/*", "src/types/*" ] } }, "include": [ "src/**/*" ] }
(3)将.js文件改为.ts
(4)结合 gulp 进行实时编译
var gulp = require('gulp'); var pump = require('pump'); var webpack = require('webpack'); var ts = require('gulp-typescript'); var livereload = require('gulp-livereload'); var tsProject = ts.createProject("tsconfig.json"); gulp.task('compile:tsc:server', function () { return gulp.src('src/server/**/*.ts') .pipe(tsProject()) .pipe(gulp.dest('dist/server')); }); //将任务同步执行 var gulpSequence = require('gulp-sequence'); gulp.task('compile', gulpSequence( 'compile:tsc:server', )) gulp.task('watch', ['compile'], function() { livereload.listen(); gulp.watch(['./src/server/**/*.ts'], ['compile:tsc:server']); })
react
可在 webpack 配置文件添加规则
{ test: /\.tsx?$/, enforce: 'pre', use: [ { loader: "ts-loader" } ] },
3.遇到的问题
遇到的问题
动态地为global添加属性
由于js灵活的风格,我们经常动态地为某一对象添加属性,但是typeScript是编译型语言,基本原则是先定义再使用,所以当我们像下面这么引用
global.testName = '哈哈';
便会出现这样的错误
类型“Global”上不存在属性“testName”
解决方法
(1)将global强制转化为any类型 (<any>global).testName = '哈哈' (2)扩展原有的对象 global.prototy.testName = '哈哈哈' (3)使用.d.ts文件</any>
declare namespace NodeJS { export interface Global { testName: string; } }
网上很多方法是直接添加一个.d.ts文件即可,但是亲测无效,需要在引用文件引入该文件,如本项目在app.ts文件中引入了
/// <reference></reference>
Flow 与 TypeScript简单对比
总结
Flow或者TypeScript都是静态类型检查的优秀解决方案,能够给有类型检查需求的一定规模的项目带来实际收益。基于现有项目的情况,迁移 TypeScript 时间成本比较大,学习曲线相对陡峭,建议现有项目采用 Flow 方案,对于一些新的项目,可以采用 TypeScript
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
react 官网动画库(react-transition-group)的新写法
위 내용은 반응 프로젝트의 정적 유형 검사 솔루션 정보의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

실제 세계에서 JavaScript의 응용 프로그램에는 서버 측 프로그래밍, 모바일 애플리케이션 개발 및 사물 인터넷 제어가 포함됩니다. 1. 서버 측 프로그래밍은 Node.js를 통해 실현되며 동시 요청 처리에 적합합니다. 2. 모바일 애플리케이션 개발은 재교육을 통해 수행되며 크로스 플랫폼 배포를 지원합니다. 3. Johnny-Five 라이브러리를 통한 IoT 장치 제어에 사용되며 하드웨어 상호 작용에 적합합니다.

일상적인 기술 도구를 사용하여 기능적 다중 테넌트 SaaS 응용 프로그램 (Edtech 앱)을 구축했으며 동일한 작업을 수행 할 수 있습니다. 먼저, 다중 테넌트 SaaS 응용 프로그램은 무엇입니까? 멀티 테넌트 SAAS 응용 프로그램은 노래에서 여러 고객에게 서비스를 제공 할 수 있습니다.

이 기사에서는 Contrim에 의해 확보 된 백엔드와의 프론트 엔드 통합을 보여 주며 Next.js를 사용하여 기능적인 Edtech SaaS 응용 프로그램을 구축합니다. Frontend는 UI 가시성을 제어하기 위해 사용자 권한을 가져오고 API가 역할 기반을 준수하도록합니다.

JavaScript는 현대 웹 개발의 핵심 언어이며 다양성과 유연성에 널리 사용됩니다. 1) 프론트 엔드 개발 : DOM 운영 및 최신 프레임 워크 (예 : React, Vue.js, Angular)를 통해 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축합니다. 2) 서버 측 개발 : Node.js는 비 차단 I/O 모델을 사용하여 높은 동시성 및 실시간 응용 프로그램을 처리합니다. 3) 모바일 및 데스크탑 애플리케이션 개발 : 크로스 플랫폼 개발은 개발 효율을 향상시키기 위해 반응 및 전자를 통해 실현됩니다.

JavaScript의 최신 트렌드에는 Typescript의 Rise, 현대 프레임 워크 및 라이브러리의 인기 및 WebAssembly의 적용이 포함됩니다. 향후 전망은보다 강력한 유형 시스템, 서버 측 JavaScript 개발, 인공 지능 및 기계 학습의 확장, IoT 및 Edge 컴퓨팅의 잠재력을 포함합니다.

JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.

Python은 데이터 과학 및 기계 학습에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 간결한 구문 및 풍부한 라이브러리 생태계로 유명하며 데이터 분석 및 웹 개발에 적합합니다. 2. JavaScript는 프론트 엔드 개발의 핵심입니다. Node.js는 서버 측 프로그래밍을 지원하며 풀 스택 개발에 적합합니다.

JavaScript는 이미 최신 브라우저에 내장되어 있기 때문에 설치가 필요하지 않습니다. 시작하려면 텍스트 편집기와 브라우저 만 있으면됩니다. 1) 브라우저 환경에서 태그를 통해 HTML 파일을 포함하여 실행하십시오. 2) Node.js 환경에서 Node.js를 다운로드하고 설치 한 후 명령 줄을 통해 JavaScript 파일을 실행하십시오.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.
