Summernote是一个jQuery插件,我不需要它的类型定义。我只想修改对象,但TS不断抛出错误。下面的线仍然给我:" Property' summernote'类型' jQueryStatic'。" 错误中不存在。
(function ($) {
/* tslint:disable */
delete $.summernote.options.keyMap.pc.TAB;
delete $.summernote.options.keyMap.mac.TAB;
/* tslint:enable */
})(jQuery)
修改
这是我的tsconfig.json
{
"compilerOptions": {
"outDir": "./dist/",
"sourceMap": true,
"noImplicitAny": true,
"module": "commonjs",
"target": "es5",
"allowJs": true,
"noUnusedParameters": true
},
"include": [
"js/**/*"
],
"exclude": [
"node_modules",
"**/*.spec.ts"
]
}
答案 0 :(得分:37)
您可以使用/* tslint:disable-next-line */
在本地禁用tslint。但是,由于这是编译器错误,因此禁用tslint可能无济于事。
您可以随时暂时将$
投放到any
:
delete ($ as any).summernote.options.keyMap.pc.TAB
允许您访问所需的任何属性。
编辑:从Typescript 2.6开始,您现在可以绕过特定行的编译器错误/警告:
if (false) {
// @ts-ignore: Unreachable code error
console.log("hello");
}
请注意the official docs "recommend you use [this] very sparingly"。为了更好地表达意图,它几乎总是总是转换为any
。
答案 1 :(得分:24)
Sub sGetData2()
On Error GoTo E_Handle
Dim strFile As String
Dim intFile As Integer
Dim strInput As String
Dim astrData() As String
Dim lngLoop1 As Long
Dim lngCount As Long
Dim lngRow As Long
strFile = "J:\downloads\sample1.txt"
intFile = FreeFile
Open strFile For Input As intFile
strInput = input(LOF(intFile), intFile)
astrData() = Split(strInput, vbLf)
lngCount = UBound(astrData)
lngRow = 1
For lngLoop1 = 3 To lngCount
If InStr(astrData(lngLoop1), "@m_start") > 0 Then
lngRow = lngRow + 1
ActiveSheet.Cells(lngRow, 1) = Mid(astrData(lngLoop1), 12)
ElseIf InStr(astrData(lngLoop1), "@m_end") > 0 Then
ActiveSheet.Cells(lngRow, 2) = Mid(astrData(lngLoop1), 12)
ElseIf InStr(astrData(lngLoop1), "&i_name 01") > 0 Then
lngLoop1 = lngLoop1 + 2
ActiveSheet.Cells(lngRow, 3) = Mid(astrData(lngLoop1), 41, 4)
ElseIf InStr(astrData(lngLoop1), "~CMS_substrate_id") > 0 Then
ActiveSheet.Cells(lngRow, 4) = Mid(astrData(lngLoop1), 24)
End If
Next lngLoop1
sExit:
On Error Resume Next
Reset
Exit Sub
E_Handle:
MsgBox Err.Description & vbCrLf & vbCrLf & "sGetData2", vbOKOnly + vbCritical, "Error: " & Err.Number
Resume sExit
End Sub
TS 3.9引入了新的魔术注释。 @ts-expect-error
将:
@ts-expect-error
相同的功能@ts-ignore
if (false) {
// @ts-expect-error: Let's ignore a single compiler error like this unreachable code
console.log("hello"); // compiles
}
// If @ts-expect-error didn't suppress anything at all, we now get a nice warning
let flag = true;
// ...
if (flag) {
// @ts-expect-error
// ^~~~~~~~~~~~~~~^ error: "Unused '@ts-expect-error' directive.(2578)"
console.log("hello");
}
和@ts-ignore
可用于所有各种编译器错误。对于类型问题(例如在OP中),由于错误抑制范围较窄,我建议使用以下替代方法之一:
▶使用any
类型
@ts-expect-error
▶Augment // type assertion for single expression
delete ($ as any).summernote.options.keyMap.pc.TAB;
// new variable assignment for multiple usages
const $$: any = $
delete $$.summernote.options.keyMap.pc.TAB;
delete $$.summernote.options.keyMap.mac.TAB;
界面
JQueryStatic
在其他情况下,对于没有/可扩展类型的模块,shorthand module declarations或module augmentations是方便的实用程序。可行的策略也是keep not migrated code in .js
和--allowJs
与checkJs: false
一起使用。
答案 2 :(得分:6)
您可以在该行之前简单地使用以下内容:
// @ts-ignore
答案 3 :(得分:0)
与this answer类似,您可以覆盖JQueryStatic
类型定义以包含summernote
属性。
interface JQueryStatic {
// Opt out of type-checking summernote using the any type
// See https://www.typescriptlang.org/docs/handbook/basic-types.html#any
summernote: any
}
(function ($) {
delete $.summernote.options.keyMap.pc.TAB;
delete $.summernote.options.keyMap.mac.TAB;
})(jQuery)