Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript:使用泛型时,如何禁用转换忽略为拾取?_Typescript_Tsc - Fatal编程技术网

Typescript:使用泛型时,如何禁用转换忽略为拾取?

Typescript:使用泛型时,如何禁用转换忽略为拾取?,typescript,tsc,Typescript,Tsc,如何禁用此行为?当您仅为库编译类型声明时,这是一个关键问题 我只需要它来编译声明: tsc --declaration true --emitDeclarationOnly true 最小代码示例: function test<T>(t: T): Omit<T, 'href'> { return t; } export const TEST_CONST = test({} as HTMLAnchorElement); 功能测试(t:t):省略{ 返回t; }

如何禁用此行为?当您仅为库编译类型声明时,这是一个关键问题

我只需要它来编译声明:

tsc --declaration true --emitDeclarationOnly true

最小代码示例:

function test<T>(t: T): Omit<T, 'href'> {
  return t;
}

export const TEST_CONST = test({} as HTMLAnchorElement);
功能测试(t:t):省略{
返回t;
}
导出常量TEST_const=TEST({}作为HTMLAnchorElement);
预期:

export declare const TEST_CONST: Omit<HTMLAnchorElement, 'href'>
导出声明常量测试\u常量:忽略
收到:

export declare const TEST_CONST: Pick<HTMLAnchorElement, "toString" | "search" | "normalize" | "host" | "password" | "origin" | "hidden" | "dir" | "slot" | "style" | "title" | "text" | "blur" | "click" | "focus" | "scroll" | "attributes" | "after" | "animate" | "accessKey" | "className" | "contentEditable" | "draggable" | "id" | "lang" | "tabIndex" | "translate" | "prefix" | "inputMode" | "download" | "href" | "ping" | "rel" | "target" | "type" | "referrerPolicy" | "name" | "charset" | "coords" | "hreflang" | "relList" | "rev" | "shape" | "addEventListener" | "removeEventListener" | "accessKeyLabel" | "autocapitalize" | "innerText" | "offsetHeight" | "offsetLeft" | "offsetParent" | "offsetTop" | "offsetWidth" | "spellcheck" | "assignedSlot" | "classList" | "clientHeight" | "clientLeft" | "clientTop" | "clientWidth" | "localName" | "namespaceURI" | "onfullscreenchange" | "onfullscreenerror" | "outerHTML" | "ownerDocument" | "scrollHeight" | "scrollLeft" | "scrollTop" | "scrollWidth" | "shadowRoot" | "tagName" | "attachShadow" | "closest" | "getAttribute" | "getAttributeNS" | "getAttributeNames" | "getAttributeNode" | "getAttributeNodeNS" | "getBoundingClientRect" | "getClientRects" | "getElementsByClassName" | "getElementsByTagName" | "getElementsByTagNameNS" | "hasAttribute" | "hasAttributeNS" | "hasAttributes" | "hasPointerCapture" | "insertAdjacentElement" | "insertAdjacentHTML" | "insertAdjacentText" | "matches" | "msGetRegionContent" | "releasePointerCapture" | "removeAttribute" | "removeAttributeNS" | "removeAttributeNode" | "requestFullscreen" | "requestPointerLock" | "scrollBy" | "scrollIntoView" | "scrollTo" | "setAttribute" | "setAttributeNS" | "setAttributeNode" | "setAttributeNodeNS" | "setPointerCapture" | "toggleAttribute" | "webkitMatchesSelector" | "baseURI" | "childNodes" | "firstChild" | "isConnected" | "lastChild" | "nextSibling" | "nodeName" | "nodeType" | "nodeValue" | "parentElement" | "parentNode" | "previousSibling" | "textContent" | "appendChild" | "cloneNode" | "compareDocumentPosition" | "contains" | "getRootNode" | "hasChildNodes" | "insertBefore" | "isDefaultNamespace" | "isEqualNode" | "isSameNode" | "lookupNamespaceURI" | "lookupPrefix" | "removeChild" | "replaceChild" | "ATTRIBUTE_NODE" | "CDATA_SECTION_NODE" | "COMMENT_NODE" | "DOCUMENT_FRAGMENT_NODE" | "DOCUMENT_NODE" | "DOCUMENT_POSITION_CONTAINED_BY" | "DOCUMENT_POSITION_CONTAINS" | "DOCUMENT_POSITION_DISCONNECTED" | "DOCUMENT_POSITION_FOLLOWING" | "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" | "DOCUMENT_POSITION_PRECEDING" | "DOCUMENT_TYPE_NODE" | "ELEMENT_NODE" | "ENTITY_NODE" | "ENTITY_REFERENCE_NODE" | "NOTATION_NODE" | "PROCESSING_INSTRUCTION_NODE" | "TEXT_NODE" | "dispatchEvent" | "getAnimations" | "before" | "remove" | "replaceWith" | "innerHTML" | "nextElementSibling" | "previousElementSibling" | "childElementCount" | "firstElementChild" | "lastElementChild" | "append" | "prepend" | "querySelector" | "querySelectorAll" | "oncopy" | "oncut" | "onpaste" | "isContentEditable" | "onabort" | "onanimationcancel" | "onanimationend" | "onanimationiteration" | "onanimationstart" | "onauxclick" | "onblur" | "oncancel" | "oncanplay" | "oncanplaythrough" | "onchange" | "onclick" | "onclose" | "oncontextmenu" | "oncuechange" | "ondblclick" | "ondrag" | "ondragend" | "ondragenter" | "ondragexit" | "ondragleave" | "ondragover" | "ondragstart" | "ondrop" | "ondurationchange" | "onemptied" | "onended" | "onerror" | "onfocus" | "ongotpointercapture" | "oninput" | "oninvalid" | "onkeydown" | "onkeypress" | "onkeyup" | "onload" | "onloadeddata" | "onloadedmetadata" | "onloadstart" | "onlostpointercapture" | "onmousedown" | "onmouseenter" | "onmouseleave" | "onmousemove" | "onmouseout" | "onmouseover" | "onmouseup" | "onpause" | "onplay" | "onplaying" | "onpointercancel" | "onpointerdown" | "onpointerenter" | "onpointerleave" | "onpointermove" | "onpointerout" | "onpointerover" | "onpointerup" | "onprogress" | "onratechange" | "onreset" | "onresize" | "onscroll" | "onsecuritypolicyviolation" | "onseeked" | "onseeking" | "onselect" | "onselectionchange" | "onselectstart" | "onstalled" | "onsubmit" | "onsuspend" | "ontimeupdate" | "ontoggle" | "ontouchcancel" | "ontouchend" | "ontouchmove" | "ontouchstart" | "ontransitioncancel" | "ontransitionend" | "ontransitionrun" | "ontransitionstart" | "onvolumechange" | "onwaiting" | "onwheel" | "autofocus" | "dataset" | "nonce" | "hash" | "hostname" | "pathname" | "port" | "protocol" | "username">;
export declare const TEST\u const:Pick;

显式类型声明将起作用,但对大型函数调用链不方便:

function test<T>(t: T): Omit<T, 'href'> {
  return t;
}

export const TEST_CONST: Omit<T, 'href'> = test({} as HTMLAnchorElement);
功能测试(t:t):省略{
返回t;
}
导出常量TEST_const:Omit=TEST({}作为HTMLAnchorElement);

这是预期值,也是一个有效值。因为
省略
是带有
排除
拾取

/**
*构造一个属性为T的类型,但类型K中的属性除外。
*/
类型省略=拾取;
尝试为它定义自己的类型

类型NoHref=Omit;
功能测试(t:t):NoHref{
返回t;
}
导出常量TEST_const=TEST({}作为HTMLAnchorElement);

Own类型当然仍将被提取,这就是
Omit
所做的。它没有隐藏任何内容,只是在IDE中键入一个好的名称别名,而不是选择一个坏的解析类型。如果您想显示一个好的名称别名,而不是一个坏的解析类型,它将不起作用。您最后一个注释是错误的,不管怎样,它都是Pick:当使用
tsc--declaration true--emitDeclarationOnly true