本文整理汇总了TypeScript中babel-types.isClassMethod函数的典型用法代码示例。如果您正苦于以下问题:TypeScript isClassMethod函数的具体用法?TypeScript isClassMethod怎么用?TypeScript isClassMethod使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了isClassMethod函数的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的TypeScript代码示例。
示例1: resetTSClassProperty
/**
* TS 编译器会把 class property 移到构造器,
* 而小程序要求 `config` 和所有函数在初始化(after new Class)之后就收集到所有的函数和 config 信息,
* 所以当如构造器里有 this.func = () => {...} 的形式,就给他转换成普通的 classProperty function
* 如果有 config 就给他还原
*/
function resetTSClassProperty (body: (t.ClassMethod | t.ClassProperty)[]) {
for (const method of body) {
if (t.isClassMethod(method) && method.kind === 'constructor') {
if (t.isBlockStatement(method.body)) {
method.body.body = method.body.body.filter(statement => {
if (t.isExpressionStatement(statement) && t.isAssignmentExpression(statement.expression)) {
const expr = statement.expression
const { left, right } = expr
if (
t.isMemberExpression(left) &&
t.isThisExpression(left.object) &&
t.isIdentifier(left.property)
) {
if (
(t.isArrowFunctionExpression(right) || t.isFunctionExpression(right))
||
(left.property.name === 'config' && t.isObjectExpression(right))
) {
const classProp = t.classProperty(left.property, right)
body.push(classProp)
handleThirdPartyComponent(classProp)
return false
}
}
}
return true
})
}
}
}
}
开发者ID:YangShaoQun,项目名称:taro,代码行数:37,代码来源:index.ts
示例2: resetTSClassProperty
export function resetTSClassProperty (body) {
for (const method of body) {
if (t.isClassMethod(method) && method.kind === 'constructor') {
for (const statement of cloneDeep(method.body.body)) {
if (t.isExpressionStatement(statement) && t.isAssignmentExpression(statement.expression)) {
const expr = statement.expression
const { left, right } = expr
if (
t.isMemberExpression(left) &&
t.isThisExpression(left.object) &&
t.isIdentifier(left.property)
) {
if (
(t.isArrowFunctionExpression(right) || t.isFunctionExpression(right)) ||
(left.property.name === 'config' && t.isObjectExpression(right))
) {
body.push(
t.classProperty(left.property, right)
)
remove(method.body.body, statement)
}
}
}
}
}
}
}
开发者ID:YangShaoQun,项目名称:taro,代码行数:27,代码来源:helper.ts
示例3: evalClass
export function evalClass (ast: t.File, props = '', isRequire = false) {
let mainClass!: t.ClassDeclaration
const statements = new Set<t.ExpressionStatement>([
template('Current.inst = this;')() as any
])
traverse(ast, {
ClassDeclaration (path) {
mainClass = path.node
},
/**
* 目前 node 的版本支持不了 class-properties
* 但 babel 又有 bug,某些情况竟然把转换后的 class-properties 编译到 super 之前
* 不然用 babel.transformFromAst 就完事了
* 现在只能自己实现这个 feature 的部分功能了,真 tm 麻烦
* @TODO 有空再给他们提 PR 吧
*/
ClassProperty (path) {
const { key, value } = path.node
statements.add(t.expressionStatement(t.assignmentExpression(
'=',
t.memberExpression(
t.thisExpression(),
key
),
value
)))
path.remove()
}
})
for (const method of mainClass.body.body) {
// constructor 即便没有被定义也会被加上
if (t.isClassMethod(method) && method.kind === 'constructor') {
const index = method.body.body.findIndex(node => t.isSuper(node))
method.body.body.push(
t.expressionStatement(t.assignmentExpression(
'=',
t.memberExpression(
t.thisExpression(),
t.identifier('state')
),
t.callExpression(t.memberExpression(t.thisExpression(), t.identifier('_createData')), [])
))
)
method.body.body.splice(index, 0, ...statements)
}
}
let code = `function f() {};` +
generate(t.classDeclaration(t.identifier('Test'), t.identifier('f'), mainClass.body, [])).code +
';' + `var classInst = new Test(${props});classInst`
code = internalFunction + code
// tslint:disable-next-line
return eval(code)
}
开发者ID:YangShaoQun,项目名称:taro,代码行数:58,代码来源:utils.ts
示例4: _getMethods
function* _getMethods(node: babel.Node) {
if (!babel.isClassDeclaration(node) && !babel.isClassExpression(node)) {
return;
}
for (const statement of node.body.body) {
if (babel.isClassMethod(statement) && statement.kind === 'method') {
yield statement;
}
}
}
开发者ID:asdfg9822,项目名称:polymer-analyzer,代码行数:10,代码来源:esutil.ts
示例5: getIdentifierName
(n) => babel.isClassMethod(n) && n.static === true &&
n.kind === 'get' && getIdentifierName(n.key) === name) as
开发者ID:asdfg9822,项目名称:polymer-analyzer,代码行数:2,代码来源:polymer2-config.ts
示例6: parsePage
//.........这里部分代码省略.........
return t.classProperty(
t.identifier(name),
t.arrowFunctionExpression(params, body.node, isAsync)
)
}
if (hasArguments && (value.isFunctionExpression() || value.isArrowFunctionExpression())) {
const method = t.classMethod('method', t.identifier(name), params, value.node.body as any)
method.async = isAsync
return method
}
const classProp = t.classProperty(
t.identifier(name),
value.isFunctionExpression() || value.isArrowFunctionExpression()
? t.arrowFunctionExpression(value.node.params, value.node.body, isAsync)
: value.node
) as any
if (staticProps.includes(name)) {
classProp.static = true
}
return classProp
})
if (globals.hasCatchTrue) {
classBody.push(t.classMethod('method', t.identifier('privateStopNoop'), [t.identifier('e')], t.blockStatement([
t.expressionStatement(
t.callExpression(
t.memberExpression(t.identifier('e'), t.identifier('stopPropagation')),
[]
)
)
])))
}
if (defaultProps.length) {
let classProp = t.classProperty(t.identifier('defaultProps'), t.objectExpression(
defaultProps.map(p => t.objectProperty(t.identifier(p.name), p.value))
)) as any
classProp.static = true
classBody.unshift(classProp)
}
} else if (arg.isIdentifier()) {
weappConf = arg.node.name
} else {
throw codeFrameError(arg.node, `${componentType || '组件'} 的第一个参数必须是一个对象或变量才能转换。`)
}
if (json && t.isObjectExpression(json)) {
classBody.push(t.classProperty(t.identifier('config'), json))
}
if (componentType === 'App') {
let hasWillMount = false
const globalData = template(`this.$app.globalData = this.globalData`)()
for (const method of classBody) {
if (!method) {
continue
}
if (!t.isClassMethod(method)) {
continue
}
if (t.isIdentifier(method.key, { name: Lifecycle.componentWillMount })) {
hasWillMount = true
method.body.body.unshift(globalData)
}
}
if (!hasWillMount) {
classBody.push(
t.classMethod(
'method',
t.identifier(Lifecycle.componentWillMount),
[],
t.blockStatement([globalData])
)
)
}
}
const wxsNames = new Set(wxses ? wxses.map(w => w.module) : [])
const renderFunc = buildRender(returned, stateKeys.filter(s => !wxsNames.has(s)), propsKeys)
const classDecl = t.classDeclaration(
t.identifier(componentType === 'App' ? 'App' : defaultClassName),
t.memberExpression(t.identifier('Taro'), t.identifier('Component')),
t.classBody(
classBody.concat(renderFunc)
),
[]
)
if (weappConf) {
classDecl.decorators = [buildDecorator(componentType || 'Page', weappConf)]
}
return classDecl
}
开发者ID:YangShaoQun,项目名称:taro,代码行数:101,代码来源:script.ts
示例7: parsePage
//.........这里部分代码省略.........
}
}
if (propKey) {
propsKeys.push(propKey)
}
}
})
}
return t.classProperty(t.identifier('_observeProps'), t.arrayExpression(
observeProps.map(p => t.objectExpression([
t.objectProperty(
t.identifier('name'),
t.stringLiteral(p.name)
),
t.objectProperty(
t.identifier('observer'),
p.observer
)
]))
))
}
if (PageLifecycle.has(name)) {
const lifecycle = PageLifecycle.get(name)!
const node = value.node as
| t.FunctionExpression
| t.ArrowFunctionExpression
const method = t.classMethod(
'method',
t.identifier(lifecycle),
params,
node ? node.body as t.BlockStatement : (prop.get('body') as any).node
)
method.async = isAsync
return method
}
if (prop.isObjectMethod()) {
const body = prop.get('body')
return t.classProperty(
t.identifier(name),
t.arrowFunctionExpression(params, body.node, isAsync)
)
}
return t.classProperty(
t.identifier(name),
value.isFunctionExpression() || value.isArrowFunctionExpression()
? t.arrowFunctionExpression(value.node.params, value.node.body, isAsync)
: value.node
)
})
if (defaultProps.length) {
let classProp = t.classProperty(t.identifier('defaultProps'), t.objectExpression(
defaultProps.map(p => t.objectProperty(t.identifier(p.name), p.value))
)) as any
classProp.static = true
classBody.unshift(classProp)
}
if (json && t.isObjectExpression(json)) {
classBody.push(t.classProperty(t.identifier('config'), json))
}
if (componentType === 'App') {
let hasWillMount = false
const globalData = template(`this.$app.globalData = this.globalData`)()
for (const method of classBody) {
if (!method) {
continue
}
if (!t.isClassMethod(method)) {
continue
}
if (t.isIdentifier(method.key, { name: Lifecycle.componentWillMount })) {
hasWillMount = true
method.body.body.unshift(globalData)
}
}
if (!hasWillMount) {
classBody.push(
t.classMethod(
'method',
t.identifier(Lifecycle.componentWillMount),
[],
t.blockStatement([globalData])
)
)
}
}
const renderFunc = buildRender(returned, stateKeys, propsKeys)
return t.classDeclaration(
t.identifier(componentType === 'App' ? 'App' : defaultClassName),
t.memberExpression(t.identifier('Taro'), t.identifier('Component')),
t.classBody(
classBody.concat(renderFunc)
),
[]
)
}
开发者ID:topud,项目名称:taro,代码行数:101,代码来源:script.ts
注:本文中的babel-types.isClassMethod函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论