# TypeScript 3.1

# 一些浏览器厂商特定的类型从 lib.d.ts 中被移除

TypeScript 内置的 .d.ts 库 ( lib.d.ts 等) 现在会部分地从 DOM 规范的 Web IDL 文件中生成。 因此有一些浏览器厂商特定的类型被移除了。

点击这里查看被移除类型的完整列表:

  • CanvasRenderingContext2D.mozImageSmoothingEnabled
  • CanvasRenderingContext2D.msFillRule
  • CanvasRenderingContext2D.oImageSmoothingEnabled
  • CanvasRenderingContext2D.webkitImageSmoothingEnabled
  • Document.caretRangeFromPoint
  • Document.createExpression
  • Document.createNSResolver
  • Document.execCommandShowHelp
  • Document.exitFullscreen
  • Document.exitPointerLock
  • Document.focus
  • Document.fullscreenElement
  • Document.fullscreenEnabled
  • Document.getSelection
  • Document.msCapsLockWarningOff
  • Document.msCSSOMElementFloatMetrics
  • Document.msElementsFromRect
  • Document.msElementsFromPoint
  • Document.onvisibilitychange
  • Document.onwebkitfullscreenchange
  • Document.onwebkitfullscreenerror
  • Document.pointerLockElement
  • Document.queryCommandIndeterm
  • Document.URLUnencoded
  • Document.webkitCurrentFullScreenElement
  • Document.webkitFullscreenElement
  • Document.webkitFullscreenEnabled
  • Document.webkitIsFullScreen
  • Document.xmlEncoding
  • Document.xmlStandalone
  • Document.xmlVersion
  • DocumentType.entities
  • DocumentType.internalSubset
  • DocumentType.notations
  • DOML2DeprecatedSizeProperty
  • Element.msContentZoomFactor
  • Element.msGetUntransformedBounds
  • Element.msMatchesSelector
  • Element.msRegionOverflow
  • Element.msReleasePointerCapture
  • Element.msSetPointerCapture
  • Element.msZoomTo
  • Element.onwebkitfullscreenchange
  • Element.onwebkitfullscreenerror
  • Element.webkitRequestFullScreen
  • Element.webkitRequestFullscreen
  • ElementCSSInlineStyle
  • ExtendableEventInit
  • ExtendableMessageEventInit
  • FetchEventInit
  • GenerateAssertionCallback
  • HTMLAnchorElement.Methods
  • HTMLAnchorElement.mimeType
  • HTMLAnchorElement.nameProp
  • HTMLAnchorElement.protocolLong
  • HTMLAnchorElement.urn
  • HTMLAreasCollection
  • HTMLHeadElement.profile
  • HTMLImageElement.msGetAsCastingSource
  • HTMLImageElement.msGetAsCastingSource
  • HTMLImageElement.msKeySystem
  • HTMLImageElement.msPlayToDisabled
  • HTMLImageElement.msPlayToDisabled
  • HTMLImageElement.msPlayToPreferredSourceUri
  • HTMLImageElement.msPlayToPreferredSourceUri
  • HTMLImageElement.msPlayToPrimary
  • HTMLImageElement.msPlayToPrimary
  • HTMLImageElement.msPlayToSource
  • HTMLImageElement.msPlayToSource
  • HTMLImageElement.x
  • HTMLImageElement.y
  • HTMLInputElement.webkitdirectory
  • HTMLLinkElement.import
  • HTMLMetaElement.charset
  • HTMLMetaElement.url
  • HTMLSourceElement.msKeySystem
  • HTMLStyleElement.disabled
  • HTMLSummaryElement
  • MediaQueryListListener
  • MSAccountInfo
  • MSAudioLocalClientEvent
  • MSAudioLocalClientEvent
  • MSAudioRecvPayload
  • MSAudioRecvSignal
  • MSAudioSendPayload
  • MSAudioSendSignal
  • MSConnectivity
  • MSCredentialFilter
  • MSCredentialParameters
  • MSCredentials
  • MSCredentialSpec
  • MSDCCEvent
  • MSDCCEventInit
  • MSDelay
  • MSDescription
  • MSDSHEvent
  • MSDSHEventInit
  • MSFIDOCredentialParameters
  • MSIceAddrType
  • MSIceType
  • MSIceWarningFlags
  • MSInboundPayload
  • MSIPAddressInfo
  • MSJitter
  • MSLocalClientEvent
  • MSLocalClientEventBase
  • MSNetwork
  • MSNetworkConnectivityInfo
  • MSNetworkInterfaceType
  • MSOutboundNetwork
  • MSOutboundPayload
  • MSPacketLoss
  • MSPayloadBase
  • MSPortRange
  • MSRelayAddress
  • MSSignatureParameters
  • MSStatsType
  • MSStreamReader
  • MSTransportDiagnosticsStats
  • MSUtilization
  • MSVideoPayload
  • MSVideoRecvPayload
  • MSVideoResolutionDistribution
  • MSVideoSendPayload
  • NotificationEventInit
  • PushEventInit
  • PushSubscriptionChangeInit
  • RTCIdentityAssertionResult
  • RTCIdentityProvider
  • RTCIdentityProviderDetails
  • RTCIdentityValidationResult
  • Screen.deviceXDPI
  • Screen.logicalXDPI
  • SVGElement.xmlbase
  • SVGGraphicsElement.farthestViewportElement
  • SVGGraphicsElement.getTransformToElement
  • SVGGraphicsElement.nearestViewportElement
  • SVGStylable
  • SVGTests.hasExtension
  • SVGTests.requiredFeatures
  • SyncEventInit
  • ValidateAssertionCallback
  • WebKitDirectoryEntry
  • WebKitDirectoryReader
  • WebKitEntriesCallback
  • WebKitEntry
  • WebKitErrorCallback
  • WebKitFileCallback
  • WebKitFileEntry
  • WebKitFileSystem
  • Window.clearImmediate
  • Window.msSetImmediate
  • Window.setImmediate

# 推荐:

如果你的运行时能够保证这些名称是可用的(比如一个仅针对 IE 的应用),那么可以在本地添加那些声明,例如:

对于 Element.msMatchesSelector ,在本地的 dom.ie.d.ts 文件里添加如下代码:

interface Element {
  msMatchesSelector(selectors: string): boolean;
}

相似地,若要添加 clearImmediatesetImmediate ,你可以在本地的 dom.ie.d.ts 里添加 Window 声明:

interface Window {
  clearImmediate(handle: number): void;
  setImmediate(handler: (...args: any[]) => void): number;
  setImmediate(handler: any, ...args: any[]): number;
}

# 细化的函数现在会使用 {}Object 和未约束的泛型参数的交叉类型

下面的代码如今会提示 x 不能被调用:

function foo<T>(x: T | (() => string)) {
  if (typeof x === 'function') {
    x();
    //      ~~~
    // Cannot invoke an expression whose type lacks a call signature. Type '(() => string) | (T & Function)' has no compatible call signatures.
  }
}

这是因为,不同于以前的 T 会被细化掉,如今 T 会被扩展成 T & Function 。 然而,因为这个类型没有声明调用签名,类型系统无法找到通用的调用签名可以适用于 T & Function() => string

因此,考虑使用一个更确切的类型,而不是 {}Object ,并且考虑给 T 添加额外的约束条件。