提问人:Alexander Cerutti 提问时间:11/15/2023 最后编辑:Alexander Cerutti 更新时间:11/15/2023 访问量:43
推断为任意的增强函数签名参数
Augmented function signature's parameters inferred as any
问:
我正在尝试增强一个包的界面,这是我无法控制的。tizen-tv-webapis
该接口拥有一个作为函数的属性。该函数具有第二个参数的签名。object
interface AVPlayPlaybackCallback {
ondrmevent?(type: AVPlayDrmType, data: object): void;
}
我想将其设置为一组缩小的属性,而不是一个宽泛的泛型对象,因为我们看到 API 似乎返回该特定形状。
// overrides.d.ts
import type { AVPlayDrmType } from "tizen-tv-webapis";
declare module "tizen-tv-webapis" {
export interface AVPlayPlaybackCallback {
ondrmevent?(type: AVPlayDrmType, data: {
name: string;
message: string;
}): void;
}
}
Typescript 似乎能够看到我创建的包含增强的文件。
但是,当我尝试创建一个符合接口的对象时,它会向我建议签名,但这两个参数都自动变为 .any
const AVPlayListeners = {
ondrmevent: (type, data) => {
// ^^^^ ^^^^ ---> any
};
};
我在这里创建了一个重现案例:https://stackblitz.com/edit/typescript-bbiuze?file=overrides.d.ts
我不明白为什么它说它是任何签名,而签名几乎相同。 必须指定参数会使增强变得毫无用处。
当然,如果没有增强,参数可以正确推断。
这是我的:tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "es2015",
"lib": ["DOM", "ES2015", "ES2017.Object", "ES2018.Promise", "ES2016.Array.Include"],
"sourceMap": true,
"jsx": "react",
"declaration": true,
"esModuleInterop": true,
"moduleResolution": "node",
"importHelpers": true,
"typeRoots": [
"node_modules/@types",
"node_modules/<organization>/types"
],
"types": ["node"],
"forceConsistentCasingInFileNames": true,
"downlevelIteration": true,
"baseUrl": ".",
},
"exclude": ["node_modules", "dist", "packages/*/node_modules", "packages/*/dist"]
}
有谁知道这里发生了什么?
谢谢。
答:
0赞
Alexander Cerutti
11/15/2023
#1
根据评论中强调的内容,该问题似乎在 .noImplicitAny: true
tsconfig.json
通过添加它,参数将有可能成为,因此,编译器被强制显示签名。any
评论
...
AVPlayListeners
type
data
any