고급 유형 힌트 : 노조 유형, 교차로 유형 및 '절대'
Union 유형 (a | b)은 값이 여러 유형 중 하나가되도록하여 여러 입력 가능성을 유연하게 처리 할 수 있습니다. 2. 교차 유형 (A & B) 다중 유형을 모든 멤버를 만족시켜야하는 복잡한 객체 모양을 만드는 데 유용합니다. 3. Never 유형은 도달 할 수 없거나 불가능한 상태를 나타내며, 절대 돌아 오지 않는 철저한 점검 및 기능에 일반적으로 사용됩니다. 이러한 고급 타입 스크립트 기능을 사용하면 유효하지 않은 상태를 대표 할 수 없게하여보다 강력하고 자체 문서화 및 유형-안전 코드가 가능합니다.
TypeScript로 작업 할 때 기본 유형 주석이 시작일뿐입니다. 보다 강력하고 표현력이 뛰어나고 유지 가능한 코드를 작성하려면 string
, number
또는 boolean
넘어서야하며 Union 유형 , 교차로 유형 및 특수한 never
과 같은 고급 유형 힌트를 활용해야합니다. 이 도구는 복잡한 시나리오에서 가치와 기능이 어떻게 행동하는지에 대한 세밀한 제어를 제공합니다.
실제 예제 및 사용 사례로 이러한 각 개념을 분류합시다.
노동 조합 유형 : 여러 가능성 처리
노조 유형은 값이 여러 유형 중 하나 일 수 있도록합니다. 수직 막대 ( |
)를 사용하여 정의합니다.
userId : String | 숫자; userId = "ABC123"; // ✅ userID = 123; // ✅
이는 유형이 보장되지 않는 API, 사용자 입력 또는 레거시 데이터를 처리 할 때 특히 유용합니다.
실제 예 : 상태 처리
함수 getStatus (상태 : "로드"| "성공"| "오류") { // ... } getstatus ( "로드"); // ✅ getstatus ( "보류"); // ❌ 할당 할 수없는 인수
복잡한 유형의 노조를 사용할 수도 있습니다.
유형 사용자 = {이름 : 문자열; 나이 : 번호}; admin = {이름 : 문자열; 권한 : 문자열 []}; 함수 printInfo (엔티티 : 사용자 | admin) { console.log (entity.name); // ✅ '이름'은 두 가지 모두에 존재합니다 // console.log (entity.age); // ❌ 오류 : 'Age'가 관리자가 아닙니다 }
? 팁 : 유형 가드를 사용하여 런타임에 Union 유형을 좁히십시오.
if (Entity의 "Age") { Console.log (entity.age); // 이제 안전합니다 }
교차 유형 : 결합 유형
교차 유형은 여러 유형을 하나로 결합합니다. 그것은 &
운영자를 사용하며 "이 값은 모든 유형을 만족시켜야합니다"를 의미합니다.
유형 사용자 = {이름 : 문자열; 이메일 : 문자열}; type timestamp = {createat : date; 업데이트 : 날짜}; user withtimestamp = user & timestamp를 입력하십시오. const 사용자 : userwithtimestamp = { 이름 : "Alice", 이메일 : "alice@example.com", 생성 : 새 날짜 (), 업데이트 : 새 날짜 (), };
실제 사용 사례 : Mixins 또는 구성 객체
withid = {id : number}를 입력합니다. withName = {이름 : String}을 입력합니다. 유형 active = {isactive : boolean}; type account = withid & withname & active; const 계정 : 계정 = { ID : 1, 이름 : "프로 사용자", Isactive : 사실, };
⚠️ 필드가 상충되는 객체 교차로에주의하십시오 .
유형 a = {data : string}; type b = {data : number}; C = A & B 형; const 예 : c = { 데이터 : ??? // 이것이 무엇 일 수 있습니까? 문자열이어야합니다. & 번호 → 불가능 →`Never ' };
그것은 우리를…
never
Type : 도달 할 수없는 상태를 나타냅니다
never
유형은 결코 일어나지 말아야 할 값을 나타냅니다. 두 가지 주요 시나리오에서 사용됩니다.
- 절대 돌아 오지 않는 기능
- 유형 좁아서 존재할 수없는 값
1. 절대 돌아 오지 않는 기능
함수 발전기 (메시지 : 문자열) : 절대 { 새로운 오류 (메시지)를 던지십시오. }
이 기능은 단지 void
반환하는 것이 아니라 결코 반환되지 않습니다. TypeScript는 never
그것을 모델링하지 않습니다.
2. 철저한 노조 점검
never
의 전형적인 사용은 모든 사례가 노조에서 처리되도록하는 것입니다.
유형 모드 = "Dark"| "가벼운"| "자동"; 함수 gettheme (모드 : 모드) { 스위치 (모드) { "Dark"사례 : "검은 색"을 반환합니다. 케이스 "라이트": "화이트"를 반환합니다. "Auto"사례 : Return Window.prefersdark? "검은 색": "흰색"; 기본: // 모든 케이스가 다루어지면`mode`는`never '가됩니다. const _exhaustiveCheck : Never = Mode; 반환 _exhaustiveCheck; } }
나중에 Mode
에 새 값을 추가하지만 처리하는 것을 잊어 버리면이 라인은 유형 오류가 발생하여 불완전한 논리를 잡는 데 도움이됩니다.
유형 시스템에서 작동 never
방법
- 하단 유형은
never
. 모든 유형에 할당 할 수 있습니다. - 그러나 어떤 유형도
never
할당 할 수 없습니다 (never
자체적으로 제외). - 가능성이 소진 될 때 유형이 좁아지는 동안 나타납니다.
함수 핸들 value (x : 문자열 | 번호) { if (typeof x === "String") { // x는 문자열입니다 } else if (typeof x === "number") { // x는 숫자입니다 } 또 다른 { // x는 '절대'입니다 - 다른 가능성은 없습니다 const 예상치 못한 : never = x; 새 오류를 던지십시오 (`예상치 못한 값 : $ {예기치 않은}`); } }
모든 것을 함께 모으십시오
양식 검증 시스템을 구축한다고 상상해보십시오.
유형 성공 = {성공 : true; 데이터 : 문자열}; 유형 실패 = {성공 : False; 오류 : 문자열}; 유형 결과 = 성공 및 실패; // 잠깐만 - 뭐? // 말이되지 않습니다. 대신에: type validationResult = 성공 | 실패; 함수 isValid (입력 : 문자열) : validationResult { if (input.length> 0) { return {success : true, data : input}; } 또 다른 { return {success : false, 오류 : "빈 입력"}; } } // 그런 다음 결과를 안전하게 처리합니다. 함수 processResult (res : validationResult) { if (res.success) { console.log ( "data :", res.data); // ✅ 유형은 성공입니다 } 또 다른 { Console.log ( "오류 :", res.error); // ✅ 유형은 고장입니다 } }
여기서 Union 유형은 조건부 타이핑을 가능하게하고 TypeScript는 success
분야를 기반으로 유형을 좁 힙니다.
요약
- Union 유형 (
A | B
) : 값은 A 또는 B입니다 . 유연한 입력에 좋습니다. - 교차 유형 (
A & B
) : 값은 A 와 B 모두 이어야합니다. 기능을 결합하는 데 유용합니다. -
never
: 불가능하거나 도달 할 수없는 상태를 나타냅니다. 철저한 점검 및 오류 기능에 필수적입니다.
이 고급 유형 기능을 사용하면 유효하지 않은 상태를 대표 할 수 없게 하여 더 안전한 코드를 작성하는 데 도움이됩니다. 일단 편안 해지면 타입 스크립트가 타이핑하는 것이 아니라 자체 문서화 와 자체 강화 가됩니다.
기본적으로 기본 주석에서 진정으로 강력한 유형 모델링에 이르기까지 레벨을 올리는 방법입니다.
위 내용은 고급 유형 힌트 : 노조 유형, 교차로 유형 및 '절대'의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP의 배열 해체 및 확장 연산자는 간결한 구문을 통해 코드 가독성 및 유연성을 향상시킬 수 있습니다. 1. 배열 해체는 인덱스 및 연관 배열에서 값을 추출하는 것을 지원합니다. [, $ 3] = $ colors와 같은 빈 자리 표시자를 통해 요소를 건너 뛸 수 있습니다. 연관 배열 해체에는 [ 'name'=> $ name] = $ user와 같은 => 일치 키가 필요하며, 이는 변수 이름을 바꾸고 누락 된 키를 처리하기 위해 기본값을 설정하는 것을 지원합니다. 2. 확장 연산자 (...)는 대부분의 조합 및 연관 배열 덮어 쓰기를 지원하는 [... $ colors, 'blue']와 같은 배열을 확장하고 병합 할 수 있지만 후속 키는 전자를 덮어 쓰고 보충하지 않습니다.

php8attributesreplacedocblocksformetadatabyprovidingtype-safe, natiallysupportedannotations.1.attributesErdefinedusing#및 cantargetclasses, method, properties 등

정적 메소드가 상속에서 self를 사용하여 호출되는 경우, 항상 호출 된 클래스보다는 메소드를 정의하는 클래스를 가리 킵니다. 정적은 늦은 정적 바인딩을 사용하지만 실제로 런타임에 실제로 호출 된 클래스를 올바르게 구문 분석 할 수 있습니다. 1. 자기는 코드가 위치한 클래스를 가리키는 초기 바인딩입니다. 2. 정적은 런타임 호출 클래스를 가리키며 늦은 바인딩입니다. 3. 정적을 사용하여 정적 공장 메소드를 구현하고 자동으로 서브 클래스 인스턴스를 반환합니다. 4. 정적 체인에서 상속 된 속성의 올바른 해상도를 지원합니다. 5. LSB는 상수가 아닌 정적 방법 및 속성에만 적합합니다. 6. STATIC는 상속 가능한 클래스에서 먼저 사용하여 유연성과 확장 성을 향상시켜야합니다.

예, phpsyntaxiseasy, 특히 인력, 특히 우수한 사람들은 well을 통합하고, andrequiresminimalsetup.itssyntaxisstraightforward를 통합하고, $ forvariable, semicolonsforcstatements 및 familonsforcc and styliarc

PHP의 가변 함수 및 매개 변수 풀기 풀기는 Splat 연산자 (...)를 통해 구현됩니다. 1. 가변 함수는 ... $ params를 사용하여 여러 매개 변수를 배열로 수집하는데, 이는 매개 변수 목록의 끝에 있어야하며 필요한 매개 변수와 공존 할 수 있습니다. 2. 매개 변수 포장 풀기 사용 ... $ 배열은 배열을 독립 매개 변수로 확장하고 숫자 인덱스 어레이에 적합한 기능으로 전달합니다. 3. 래퍼 함수에서 매개 변수를 전달하는 것과 같은이 두 가지는 조합하여 사용할 수 있습니다. 4. PHP8은 연관 배열을 풀 때 이름 지정된 매개 변수를 지원하며 키 이름이 매개 변수 이름과 일치하도록해야합니다. 5. 통과 할 수없는 데이터에 대한 포장 풀기 사용을 피하고 치명적인 오류를 방지하며 매개 변수 수량의 한계에주의를 기울이십시오. 이러한 기능은 코드 유연성 및 가독성을 향상시켜 FUNC_GET_ARGS () 등을 줄입니다.

theternaryoperator (? :) isusedforsimpleif-elseLogic, returnOneOftWovaluesBasedOnAcondition; 2. thenullcoalescingOperator (??) returnStheleftoperandifitispitistinnullorUndefined, OtherwisTherightOperand, AffectionpectedBbefalseffalseffalseffalseffalseffals

php8.0 'snamedarguments 및 prostructorPropertyProMotionImproveCodeClarityandreduceboilerPlate : 1.namedArgumentsLeTleTyoupAsSparametersByName, enipancing andlallowingFlexibleArder; 2. ConstructorPropertyPromotionAutomicalLy screatesAndAssignSproperties

화살표 기능은 단일 표현식, 간단한 콜백 및 개선 된 가독성이있는 시나리오에 적합합니다. 2. 익명 함수는 멀티 라인 로직, 복잡한 제어 흐름, 외부 변수 참조 및 수율 생성기를 사용한 시나리오에 적합합니다. 따라서 특정 요구에 따라 선택해야합니다. 간단한 시나리오는 코드 단순성을 향상시키기 위해 화살표 기능 우선 순위를 정하고 복잡한 시나리오는 익명 기능을 사용하여 완전한 기능 지원을 얻습니다.
