例如:
if(isset($_POST['submit']))
interface Foo {
someProperty: Number
someMethod?: (str: string) => void
}
class Bar implements Foo {
someProperty = 42
someMethod (str) {
console.log(this.someProperty)
}
}
的{{1}}参数显然是一个字符串。但是编译器抱怨道:
str
我做错了什么?
修改:someMethod()
报告版本2.8.3。
答案 0 :(得分:3)
答案 1 :(得分:2)
someMethod()的str参数显然是一个字符串
不一定。你可以编写一些满足界面的不同签名;例如
someMethod (s: string | number) {
或
someMethod (s: any) {
implements
子句只是对您的类进行的 post hoc 检查,以确保您的类成功实现了该接口。它 not 直接更改类中任何声明的属性或方法的类型。
如果您没有拥有any
子句,那么您有隐式implements
,那么您有一个隐含的any
< em> with ,因为implements
条款不会影响班级成员的类型。
答案 2 :(得分:1)
类不是实现接口的唯一方法。如果使用创建并返回对象(有时称为工厂函数)而不是类的函数,则不必显式键入方法参数:
interface Foo {
someProperty: number
someMethod?: (str: string) => void
}
function createBar(): Foo {
return {
someProperty: 42,
someMethod: (str) => {
const n = str.length; // ok because parameter inferred as str: string
}
}
}