Búsqueda de sitios web

TypeScript y argumentos desestructurados opcionales


No parece que pueda hacer que los argumentos opcionales funcionen con argumentos desestructurados en TypeScript.

Se genera el código correcto para el argumento, pero Typescript parece no permitirme usar las variables generadas en mi código, lo que anula el propósito.

¿Estoy haciendo algo mal? Aquí hay una reducción:

declare var lastDirectionWasDownish : boolean;

function goToNext(
    { 
        root: Node = document.activeElement, 
        actLikeLastDirectionWasDownish:boolean = lastDirectionWasDownish
    } = {}
) {
    return root && actLikeLastDirectionWasDownish;
}

que se compila en

function goToNext(_a) {
    var _b = _a === void 0 ? {} : _a, _c = _b.root, Node = _c === void 0 ? document.activeElement : _c, _d = _b.actLikeLastDirectionWasDownish, boolean = _d === void 0 ? lastDirectionWasDownish : _d;
    return root && actLikeLastDirectionWasDownish;
}

Respuesta #1

TypeScript en realidad te está evitando cometer un error que pasarías por alto en JavaScript puro. El siguiente JavaScript puro:

function foo({root: Node}) {
   // the parameter `root` has been copied to `Node`
}

TypeScript entiende esto y no te permite usar Node. Para agregar una anotación de tipo, en realidad harías:

function foo({root}: {root: Node}) {
   // now you can use `root` and it is of type Node
}

Arreglar

Tú quieres

function foo({root = document.activeElement } : {root: Node}) {
    root;// Okay
}

Artículos relacionados