For AI agents: the complete documentation index is available at /tc39-atlas/llms.txt, the full documentation bundle is available at /tc39-atlas/llms-full.txt, and this page is available as Markdown at /tc39-atlas/proposals/proposal-as-patterns.md.
  • 简体中文
  • as destructuring patterns S0

    中文标题:as 解构模式

    提案概览
    提案速览

    该提案在解构和模式匹配中引入 as 绑定模式,允许将匹配的值绑定到新的标识符。该变更旨在同时支持赋值和绑定上下文,并将补充独立的模式匹配提案。

    Note

    以下 README 来自上游仓库,其中的阶段或状态标注可能滞后;当前信息以提案概览为准。

    ECMAScript 用于匹配和解构的 As-Patterns

    状态

    阶段:0

    作者:Kat Marchán (npm, @maybekatz)

    提案负责人:Kat Marchán (npm, @maybekatz)

    简介

    当匹配非标识符值时,用户通常可能希望在匹配的同时将该值绑定到一个标识符。因此,建议扩展解构语法以支持这种绑定。此外,独立的模式匹配提案也将从这一变更中受益,因为标识符是不可反驳的模式,它允许将匹配操作同时绑定到标识符。

    该语法使用 as 关键字,如下所示:

    const {x: {y} as x} = {x: {y: 1}}
    // x 是 {y: 1}
    // y 是 1

    或者:

    function foo ([{y} as x, [z] as zed = [1]]) {
      // x 是 {y: ...}
      // y 是 x.y
      // 如果 arguments[0][1] 是 undefined,则 z 会运行初始化器
    }

    这同样适用于 match

    match (x) {
      when {x: {y: 1} as x} ~> console.log(x.y === 1)
    }

    注意:此语法被 F# 所使用。它也让人联想到 import 语句中的 as 语法,因此该语言中已有此类绑定的先例(import * as bar from './x.js'

    总体概况

    相关的当前提案

    As-Patterns

    语法

    12.15.5 解构赋值变更

    AssignmentRebinding :
      `as` IdentifierReference
    
    AssignmentElement :
      DestructuringAssignmentTarget
      DestructuringAssignmentTarget AssignmentRebinding
      DestructuringAssignmentTarget Initializer
      DestructuringAssignmentTarget AssignmentRebinding Initializer

    13.3.3 解构绑定模式变更

    BindingRebinding :
      `as` IdentifierReference
    
    BindingElement :
      SingleNameBinding
      BindingPattern
      BindingPattern BindingRebinding
      BindingPattern Initializer
      BindingPattern BindingRebinding Initializer

    匹配运算符 语法变更

    MatchRebinding :
      `as` IdentifierReference
    
    MatchElement :
      SingleNameBinding
      MatchPattern
      MatchPattern MatchRebinding
      MatchPattern Initializer
      MatchPattern MatchRebinding Initializer